[英]How do I convert assembly code to C code?
我需要一些幫助來解決這個問題。 我正在嘗試從匯編代碼中對代碼進行逆向工程,但我一直被 1 個命令關閉,我對為什么感到困惑。 我得到的匯編代碼(我的注釋在#中)是這樣的。
0x00005555555545fa <+0>: push %rbp
0x00005555555545fb <+1>: mov %rsp,%rbp #int x,y
=> 0x00005555555545fe <+4>: movl $0x2b,-0xc(%rbp) #set x = 43
0x0000555555554605 <+11>: movl $0x2fd,-0x8(%rbp) #set y = 765
0x000055555555460c <+18>: mov -0xc(%rbp),%edx #load x into %edx
0x000055555555460f <+21>: mov -0x8(%rbp),%eax #load y into %eax
0x0000555555554612 <+24>: add %edx,%eax #add x and y
0x0000555555554614 <+26>: mov %eax,-0x4(%rbp) # y = x + y
0x0000555555554617 <+29>: mov $0x0,%eax
0x000055555555461c <+34>: pop %r bp
0x000055555555461d <+35>: retq
這是我當前的代碼和生成的匯編代碼
int main(){
int x,y;
x = 43;
y = 765;
x = y;
y = y + x;
}
0x00005555555545fa <+0>: push %rbp
0x00005555555545fb <+1>: mov %rsp,%rbp
=> 0x00005555555545fe <+4>: movl $0x2b,-0x8(%rbp)
0x0000555555554605 <+11>: movl $0x2fd,-0x4(%rbp)
0x000055555555460c <+18>: mov -0x4(%rbp),%eax
0x000055555555460f <+21>: mov %eax,-0x8(%rbp)
0x0000555555554612 <+24>: mov -0x8(%rbp),%eax
0x0000555555554615 <+27>: add %eax,-0x4(%rbp)
0x0000555555554618 <+30>: mov $0x0,%eax
0x000055555555461d <+35>: pop %rbp
0x000055555555461e <+36>: retq
我很難弄清楚如何將 x 加載到 %edx 中,然后添加 %eax 和 %edx。 c 提供任何幫助:
沒有易於使用的工具來進行這種轉換。 (另一個方向很簡單:將一些高級代碼編譯成匯編。)
雖然有一些像你的問題那樣翻譯的例子,但到目前為止,這個問題太復雜了,獎勵太少了。 這有點像在車輛碰撞后撿起碎片並確定車輛在碰撞前所處的狀態。 NTSB 在發生重大事故后經常會這樣做,但付出的努力是相當可觀的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.