所以我正在上一門課,在那里我得到了一個目標檔案,需要將它逆向工程為 c 代碼。我被告知使用的命令是“gdb assignment6_1.o”以在 gdb 中打開它,“disass main”以查看匯編代碼。
我自己也在使用“objdump -dr assignment6_1.o”,因為它會輸出更多資訊。
我遇到的問題是,使用 objdump,我可以看到程式正在嘗試訪問我認為是變數或字串“.rodata 0x41”的內容。有多個 .rodata,這只是一個示例。
是否有命令或在某個地方我可以查看它所參考的內容?我還可以訪問“祝福”程式。
下面是我的反匯編代碼片段。
a3: 48 8d 35 00 00 00 00 lea 0x0(%rip),%rsi # aa <main 0x31>
a6: R_X86_64_PC32 .rodata 0x41
aa: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # b1 <main 0x38>
ad: R_X86_64_PC32 _ZSt4cout-0x4
b1: e8 00 00 00 00 callq b6 <main 0x3d>
b2: R_X86_64_PLT32 _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc-0x4
b6: 48 8d 35 00 00 00 00 lea 0x0(%rip),%rsi # bd <main 0x44>
b9: R_X86_64_PC32 .rodata 0x53
bd: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # c4 <main 0x4b>
c0: R_X86_64_PC32 _ZSt4cout-0x4
c4: e8 00 00 00 00 callq c9 <main 0x50>
c5: R_X86_64_PLT32 _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc-0x4
c9: 48 8d 35 00 00 00 00 lea 0x0(%rip),%rsi # d0 <main 0x57>
cc: R_X86_64_PC32 .rodata 0x5e
d0: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # d7 <main 0x5e>
d3: R_X86_64_PC32 _ZSt4cout-0x4
d7: e8 00 00 00 00 callq dc <main 0x63>
d8: R_X86_64_PLT32 _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc-0x4
dc: 48 8d 35 00 00 00 00 lea 0x0(%rip),%rsi # e3 <main 0x6a>
df: R_X86_64_PC32 .rodata 0x6e
e3: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # ea <main 0x71>
e6: R_X86_64_PC32 _ZSt4cout-0x4
ea: e8 00 00 00 00 callq ef <main 0x76>
eb: R_X86_64_PLT32 _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc-0x4```
uj5u.com熱心網友回復:
有沒有辦法查看目標檔案中“.rodata (記憶體位置)”的內容?
當然。兩者都objdump可以readelf轉儲任何部分的內容。
例子:
// x.c
#include <stdio.h>
int foo() { return printf("AA.\n") printf("BBBB.\n"); }
gcc -c x.c
objdump -dr x.o
...
9: 48 8d 05 00 00 00 00 lea 0x0(%rip),%rax # 10 <foo 0x10>
c: R_X86_64_PC32 .rodata-0x4
...
1f: 48 8d 05 00 00 00 00 lea 0x0(%rip),%rax # 26 <foo 0x26>
22: R_X86_64_PC32 .rodata 0x1
...
請注意,因為RIP這些指令中使用的是下一條指令的地址,所以我們關心的實際資料在.rodata 0and .rodata 5(在你原來的反匯編中,你關心的是.rodata 45,而不是.rodata 41)。
那么那里有什么?
objdump -sj.rodata x.o
x.o: file format elf64-x86-64
Contents of section .rodata:
0000 41412e0a 00424242 422e0a00 AA...BBBB...
或者,使用 readelf:
readelf -x .rodata x.o
Hex dump of section '.rodata':
0x00000000 41412e0a 00424242 422e0a00 AA...BBBB...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/488485.html
