簡單C語言程式的彙編分析1

2021-05-23 21:53:47 字數 1618 閱讀 1921

源程式如下:

#include

int main()

通過vc++6.0

的反彙編檢視,**如下

1:#include

2:int main() 3:

0040102a

popedi;

彈出值,放入

edi暫存器中,

esp-4

0040102bpopesi;

彈出值,放入

esi暫存器中,

esp-4

0040102c

popebx;

彈出值,放入

ebx暫存器中,

esp-4

0040102dmovesp,ebp:

恢復棧頂

0040102f

popebp;

彈出值,放入

ebp暫存器中,

esp-4

00401030ret

下面針對上面的**及注釋進行分析:

1、紅色部分為原

c語言程式,不做解釋; 2、

其他為反彙編** ①、

彙編**中的

edi,

esi,

ebx,

esp,

ebp為

32位彙編指令,同

16位彙編指令

,di,si,bx,sp,bp。②、

push ebp

把ebp

暫存器中的內容放到堆疊中,同時

esp暫存器中存放的位址減少四個位元組;

③、mov ebp,esp

把棧頂指標賦給

ebp暫存器;

④、sub esp,40h

將esp

暫存器內位址減去

64,用以存放區域性變數;

⑤、push ebx

和push esi

和push edi

向堆疊中插入暫存器中資料;

⑥、lea edi,[ebp-40h]

,首先,

ebp-40h

指的是棧頂指標減去

64,即存放區域性變數那段資料的低位址段,現在

edi中存放

ebp-40h;⑦、

下面三行,將

10h即

16賦給

ecx,然後將

0cccccccch

賦給eax

(隨機),(這就是有時候除錯時,目標位址以為的地方為

cc的原因了)

rep stos dword ptr[edi]

將重複填充存放區域性變數的那段區間,重複次數為

ecx內容

10h,即

16次,存放資料為

eax內容,並且每次

edi增加四個位元組,剛好

64個位元組即

40h;

⑧、xor eax,eax

所有的返回值均存放在

eax中,此指令將

eax清零;

⑨、下面就是出棧了,直到

mov esp,ebp

將ebp

暫存器中儲存的棧頂指標賦給

esp;然後彈出

ebp,

ret返回。

最最簡單的c語言函式彙編分析

xp vc6.0 int plus int x,int y 以下是vc6.0的反彙編視窗 1 int plus int x,int y 2 0040103a pop edi 0040103b pop esi 0040103c pop ebx 0040103d mov esp,ebp 0040103f...

彙編1 最簡單的彙編小程式

section data sesion text globl start start movl 1,eax movel 4 ebx int 0x80 解析 section data 開頭的名稱並不是指令的助記符,不會被翻譯成機器指令,而是給彙編器一些特殊指示,稱為彙編指示 assembler dir...

簡單的匯程式設計序分析

section data section text globl start start movl 1,eax movl 4,ebx int 0x80 將這段程式儲存為hello.s,然後用彙編器as把匯程式設計序中的助記符翻譯成機器指令 彙編指令與機器指令是對應的 生成目標檔案hello.o。然後用...