簡體   English   中英

如何將匯編代碼轉換為 C 代碼?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM