呼叫編譯器產生組合語言mstore.s:
gcc -og -s mstore.c
呼叫彙編器產生二進位制檔案mstore.o:
gcc -og -c mstore.c
反彙編:
objdump -d mstore.o
編譯生成二進位制可執行檔案prog:
gcc -og -o prog main.c mstore.c
反彙編:
objdump -d prog
long mult2(long,long);
void multstore(long x,long y,long *dest)
.file "mstore.c"
.text
.globl multstore
.type multstore, @function
multstore:
.lfb0:
.cfi_startproc
pushq %rbx
.cfi_def_cfa_offset 16
.cfi_offset 3, -16
movq %rdx, %rbx
call mult2@plt
movq %rax, (%rbx)
popq %rbx
.cfi_def_cfa_offset 8
ret.cfi_endproc
.lfe0:
.size multstore, .-multstore
.ident "gcc: (ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0"
.section .note.gnu-stack,"",@progbits
二進位制檔案mstore.o不可檢視
0000000000000000 :
0: 53 push %rbx
1: 48 89 d3 mov %rdx,%rbx
4: e8 00 00 00 00 callq 9 9: 48 89 03 mov %rax,(%rbx)
c: 5b pop %rbx
d: c3 retq
要生成可執行**需要一組目標**檔案.o執行鏈結器,而這組目標**檔案中必須包含乙個main函式
#includevoid multstore(long x,long y,long *dest);
int main()
long mult2(long a,long b)
#includestruct a;
struct b;
struct c;
int main()
反彙編 函式指標
函式指標的定義 返回型別 呼叫約定 變數名 引數列表 例如 int cdecl myfun int,int 一般都用來呼叫非本身程式提供的函式來進行使用 如下 includeint main 反彙編如下 5 int cdecl myfun int,int 6 7 int i 10 00401028 ...
c 反彙編 迴圈結構
debug 23 int nsum 0 00a572ae c7 45 f8 00 0000 00mov dword ptr nsum 0 24 int nindex 0 00a572b5 c7 45 ec 00 0000 00mov dword ptr nindex 0 25 do 26 while...
反彙編的call和retn
call指令 call指令可不是如喚指令,而是子程式呼叫指令。那麼組合語言中的子程式是什麼呢?子程式能被其它程式呼叫,在實現某種功能後能自動返回到呼叫程式去的程式。其最後一條指令一定是返回指令,故能保證得新返回到呼叫它的程式中去。也可呼叫其它子程式,甚至可自身呼叫。我們可以暫時把子程式理解為乙個 段...