我正在練習逆向工程 C 目標檔案。假設我有一個 C 程式的目標檔案:
#include <stdio.h>
#include <string.h>
int main (int argc, char ** argv) {
char * input = argv[1];
int result = strcmp(input, "text_to_compare");
if (result == 0) {
printf("%s\n", "text matches");
}
else {
printf("%s\n", "text doeesn't match");
}
return 0;
}
鑒于它是使用 -g 標志和 x86-64 架構編譯的,我將如何從目標檔案中查找“text_to_compare”?
uj5u.com熱心網友回復:
在二進制檔案上運行strings將在檔案中包含四個或更多可列印字符的所有序列。對于一個簡單的檔案,這可能就足夠了,但對于一個較大的檔案,您最終可能會遇到很多誤報。例如,使用生成的二進制檔案編譯代碼gcc并在其上運行strings將回傳 295 個結果。
我們可以首先使用objdump命令來反匯編示例檔案中的代碼:
$ objdump --disassemble=main a.out
a.out: file format elf64-x86-64
Disassembly of section .init:
Disassembly of section .plt:
Disassembly of section .text:
0000000000401136 <main>:
401136: 55 push %rbp
401137: 48 89 e5 mov %rsp,%rbp
40113a: 48 83 ec 20 sub $0x20,%rsp
40113e: 89 7d ec mov
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/516566.html
標籤:Intel Collective C部件x86-64目标文件
