gcc內聯彙編將結構體成員清零

2021-06-07 08:25:50 字數 2162 閱讀 5099

typedef struct tagstru

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+08], ecx

:00401584 89542404 mov dword ptr [esp+04], edx

:00401588 c7042411905400 mov dword ptr [esp], 00549011

:0040158f e8cc3b0000 call 00405160 ; printf

:00401594 8d5d88 lea ebx, dword ptr [ebp-78]

:00401597 31c9 xor ecx, ecx

:00401599 31c0 xor eax, eax

:0040159b 890b mov dword ptr [ebx], ecx

:0040159d 31d2 xor edx, edx

:0040159f 894304 mov dword ptr [ebx+04], eax

:004015a2 31c9 xor ecx, ecx

:004015a4 895308 mov dword ptr [ebx+08], edx

:004015a7 c7042427905400 mov dword ptr [esp], 00549027

:004015ae 8b4590 mov eax, dword ptr [ebp-70]

:004015b1 8b7d8c mov edi, dword ptr [ebp-74]

:004015b4 8b7588 mov esi, dword ptr [ebp-78]

:004015b7 8944240c mov dword ptr [esp+0c], eax

:004015bb 897c2408 mov dword ptr [esp+08], edi

:004015bf 89742404 mov dword ptr [esp+04], esi

:004015c3 e8983b0000 call 00405160 ; printf

還是多了一條lea指令

GCC內聯彙編

有時為了高效,有時為了直接控制硬體,有些模組我們不得不直接用組合語言來編寫,並且對外提供呼叫的介面,隱藏細節,這其實就是內聯彙編。如何使用內聯彙編?我們就以 gcc 為例,一窺其中奧秘!一 關鍵字 如何讓 gcc 知道 中內嵌的彙編呢?借助 關鍵字!來看下面的例子 asm volatile hlt ...

gcc內聯彙編

有時為了高效,有時為了直接控制硬體,有些模組我們不得不直接用組合語言來編寫,並且對外提供呼叫的介面,隱藏細節,這其實就是內聯彙編。如何使用內聯彙編?我們就以 gcc 為例,一窺其中奧秘!一 關鍵字 如何讓 gcc 知道 中內嵌的彙編呢?借助關鍵字!來看下面的例子 a volatile hlt a 表...

GCC 內聯彙編

有時為了高效,有時為了直接控制硬體,有些模組我們不得不直接用組合語言來編寫,並且對外提供呼叫的介面,隱藏細節,這其實就是內聯彙編。如何使用內聯彙編?我們就以 gcc 為例,一窺其中奧秘!一 關鍵字 如何讓 gcc 知道 中內嵌的彙編呢?借助關鍵字!來看下面的例子 asm volatile hlt a...