最近在一個技術(shù)分享上聽說了一個有意思的gdb插件:peta(https://github.com/longld/peda),使用它可方便地對C/C++代碼進行逆向工程
安裝方法很簡單, git clone https://github.com/longld/peda.git ~/peda echo "source ~/peda/peda.py" >> ~/.gdbinit echo "DONE! debug your program with gdb and enjoy" 接下來寫個小程序試用下: #include <iostream> int main() { int i = 10; i = i++; std::cout << i << std::endl; return 0; } 執(zhí)行 g++ -g -O0 1.cpp ./a.out 10 可以看到i的結(jié)果為10。為什么會這樣呢?我們逆向二進制 gdb ./a.out 核心代碼如下, 0x00000000004007ea <+8>: mov DWORD PTR [rbp-0x4],0xa ; i = 10 0x00000000004007f1 <+15>:mov eax,DWORD PTR [rbp-0x4] ; eax = i(10) => 0x00000000004007f4 <+18>:lea edx,[rax+0x1] ; edx = 11 0x00000000004007f7 <+21>:mov DWORD PTR [rbp-0x4],edx ; i = edx(11) 0x00000000004007fa <+24>:mov DWORD PTR [rbp-0x4],eax ; i = eax(10) |
|