typedef struct tagstru
{
int a;
int b;
int c;
}stru;
stru sa;
sa.a = 0x123;
sa.b = 0x456;
sa.c = 0x789;
printf("stru: a=%d b=%d c=%d\n", sa.a, sa.b, sa.c);
__asm__ __volatile__ (
"xorl %%ecx, %%ecx\n\t"
"xorl %%eax, %%eax\n\t"
"movl %%ecx, (%%ebx)\n\t"
"xorl %%edx, %%edx\n\t"
"movl %%eax, 4(%%ebx)\n\t"
"xorl %%ecx, %%ecx\n\t"
"movl %%edx, 8(%%ebx)"
: "=m"(sa)
: "b"(&sa)
: "eax", "ecx", "edx");
printf("clear stru: a=%d b=%d c=%d\n", sa.a, sa.b, sa.c);
反汇编代码
:00401558 C74588DEBC3A12 mov [ebp-78], 00000123
:0040155F BBDEBC9A78 mov ebx, 00000789
:00401564 B9DEBC6A45 mov ecx, 00000456
:00401569 C7458CDEBC6A45 mov [ebp-74], 00000456
:00401570 BADEBC3A12 mov edx, 00000123
:00401575 C74590DEBC9A78 mov [ebp-70], 00000789
:0040157C 895C240C mov dword ptr [esp+0C], ebx
:00401580 894C2408 mov dword ptr [esp

这篇博客探讨了如何使用GCC内联汇编将结构体的成员设置为零,通过分析反汇编代码,揭示了过程中多出的一条lea指令。
最低0.47元/天 解锁文章
931

被折叠的 条评论
为什么被折叠?



