编译器获取这些代码,并将其转换为机器代码。
在二进制代码编译后,如何查看原始C代码?
发布于 2011-10-17 21:25:24
这通常被描述为“把汉堡包变成牛”。
反编译程序将生成与原始代码在功能上等价的C源代码,但是它不会有任何原始符号名,并且可能没有相同的结构。它甚至可能不是很“可读的”。
无法从已编译的程序中恢复原始源。
发布于 2011-10-17 20:07:15
您无法从编译的二进制文件中取回原始的C源代码--C中有很多方法可以产生相同的结果,因此没有唯一的源代码。
这个过程称为反编译
如果我误解了您的问题,并且您想知道如何查看编译器从C代码中生成的汇编程序,那么这取决于特定的编译器,但它们都可以这样做。请参阅我怎样才能看到由gcc编译器为C/C++程序生成的汇编代码?
发布于 2011-10-17 20:14:48
使用ollydbg并在可有可无的代码中找到代码:)
例如,编译后的代码
int main()
{
system("PAUSE");
return 0;
}很难在所有的行中找到不确定的,但如果你垫它,你可以发现它更容易,例如.编译这段代码
int main()
{
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
//mycode
system("PAUSE");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
return 0;
}现在,在反汇编中,我将能够看到"nops“的行,在它们之间是二进制形式的代码。
CPU Disasm
Address Hex dump Command Comments
004013F8 |. 90 NOP
004013F9 |. 90 NOP
004013FA |. 90 NOP
004013FB |. 90 NOP
004013FC |. 90 NOP
004013FD |. 90 NOP
004013FE |. 90 NOP
004013FF |. 90 NOP
00401400 |. 90 NOP
00401401 |. 90 NOP
00401402 |. 90 NOP
00401403 |. 90 NOP
00401404 |. 90 NOP
00401405 |. 90 NOP
00401406 |. 90 NOP
00401407 |. 90 NOP
00401408 |. 90 NOP
00401409 |. 90 NOP
0040140A |. 90 NOP
0040140B |. 90 NOP
0040140C |. C70424 004044 MOV DWORD PTR SS:[LOCAL.6],OFFSET 004440
00401413 |. E8 D8500100 CALL <JMP.&msvcrt.system>
00401418 |. 90 NOP
00401419 |. 90 NOP
0040141A |. 90 NOP
0040141B |. 90 NOP
0040141C |. 90 NOP
0040141D |. 90 NOP
0040141E |. 90 NOP
0040141F |. 90 NOP
00401420 |. 90 NOP
00401421 |. 90 NOP
00401422 |. 90 NOP
00401423 |. 90 NOP
00401424 |. 90 NOP
00401425 |. 90 NOP
00401426 |. 90 NOP
00401427 |. 90 NOP
00401428 |. 90 NOP
00401429 |. 90 NOP
0040142A |. 90 NOP
0040142B |. 90 NOP所以你可以看到我的系统调用被编译成
C70424004044E8D8500100我希望你的意思是:)
这可以通过ollydbg或x32dbg或objdump -M intel -d来完成;)
https://stackoverflow.com/questions/7798923
复制相似问题