簡體   English   中英

Switch語句匯編代碼到c

[英]Switch statement assembly code to c

我很難將 switch 語句從匯編代碼逆向工程為 C 程序。

.file 
"switch_prob2-soln.c"
.text
.globl switch_prob
.type switch_prob, @function
switch_prob:
.LFB0:
.cfi_startproc
subq $60, %rsi
cmpq $5, %rsi
ja .L2
jmp *.L7(,%rsi,8)
.section .rodata
.align 8
.align 4
 .L7:
 .quad .L3
 .quad .L2
 .quad .L3
 .quad .L4
 .quad .L5
 .quad .L6
 .text
 .L3:
 leaq 0(,%rdi,8), %rax
 ret
 .L4:
 movq %rdi, %rax
 sarq $3, %rax
 ret
 .L5:
 movq %rdi, %rax
 salq $4, %rax
 subq %rdi, %rax
 movq %rax, %rdi
 .L6:
 imulq %rdi, %rdi
 .L2:
 leaq 75(%rdi), %rax
 ret
 .cfi_endproc
 .LFE0:
 .size switch_prob, .-switch_prob
  .ident "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3"
 .section .note.GNU-stack,"",@progbits

這是我擁有的基本 C 程序:

long switch_prob(long x, long n)
{
    long result = x;
    switch(n) {

 }
 return result;
 }

我所要求的只是有用的開始建議。 我知道我可以用 -S 或 -O1 編譯。 感謝您的時間。

這是我的 c 代碼在匯編中顯示的內容在此處輸入圖片說明

這是我的 c 代碼

在此處輸入圖片說明

如果有人可以幫助我,那就太棒了,我正在嘗試讓四邊形顯示 3 2 3 4 5 6

目前還不清楚你有什么問題。 我希望你知道它使用跳轉表。

很明顯,您有 6 個案例和一個默認值,並帶有一些共享代碼。 說明很簡單,我相信你對這些沒有問題。

至於 switch 表達式本身,它只是由單個指令完成的微不足道的轉換。

我盡量不放棄解決方案,畢竟你是征求意見才開始的。 你需要更多提示嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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