80483e8: mov edx,DWORD PTR [ebp+0x8]80483eb: mov eax,DWORD PTR [ebp+0xc]80483ee: add eax,edx}
tp=&tmp
_MyFunc endp _TEXT ends我們在分析上面彙編程式碼之前,先來認識一下更多的彙編指令,此表是對上面部分操作碼及其功能的接續| 操作碼 | 運算元 | 功能
movl -4(%ebp), %eaxmovl $170, 12(%eax)//返回值movl $0, %eaxleaveret結構體複製struct persion{char sex
}彙編程式碼fun:pushl %ebpmovl %esp, %ebpmovl 8(%ebp), %eaxsubl 12(%ebp), %eaxpopl %ebpretmain:pushl %ebpmovl
當然以上具體到 ISA 這只是一些普遍實現, 具體生成的程式碼還涉及到ISA 的特性呼叫約定編譯器的最佳化處理和人為最佳化(比如 inline)以下是一些中文內容的參考函式呼叫棧一個地址傳遞的分析[原創]常見函式呼叫約定(x86、x64、a
c$chmod +s vuln //給程式可執行許可權使用gdb反編譯程式實現拆分:$gdb vuln(gdb) disassemble validate_passwd(gdb) disassemble foo(gdb) disassem
舉例,有一段彙編程式碼,編譯後用ld -e offset連結,在另一段C程式碼中((void(*)(void))offset)(),就以函式呼叫的語法執行了這段程式碼,但這個函式沒有以push EBP開始,也未必以ret結束),那麼我們稱這