언어/c언어

어셈블리 구조체 접근

파아랑새 2017. 10. 21. 23:10

 

# include <stdio.h>

typedef struct _stu {
 int v1;
 int v2;
}stu;

int main(void) {
 stu s;
 printf("address(s) => %p\n", &s);
 __asm
 {
  lea  edi, s;
  mov  eax, edi;
  mov  dword ptr[eax + 0], 10;
  mov  dword ptr[eax + 4], 11;
 }
 printf("s.v1 => %d\n", s.v1);
 printf("s.v2 => %d\n", s.v2);
 return 0;
}

///////////////////////////////////////////////////////////////////////////////////////////

 

#include <stdio.h>

typedef struct _stu
{
 int v1;
 int v2;
 int v3;
}stu;

int main(void)
{
 stu s;
 /*
 int* p = NULL;
 p = &s.v1;
 *p = 10;
 p += 1;
 *p = 11;
 p += 1;
 *p = 12;
 printf("s.v1 : %d\n", s.v1);
 printf("s.v2 : %d\n", s.v2);
 printf("s.v3 : %d\n", s.v3);
 */
 void* p = NULL;
 p = &s;
 //int(*p) = 1;
 printf("sizeof(p) => %d\n", sizeof(p));
 printf("address(p) => %x\n", (int)p+4);
 printf("address(s.v1) => %x\n", &(s.v2));
 //p += 1;
 //*p = 2;

 return 0;
}