我可以看到汇编语言程序产生高级语言程序的输出吗? [关闭]
Posted
技术标签:
【中文标题】我可以看到汇编语言程序产生高级语言程序的输出吗? [关闭]【英文标题】:can i see assembly language program produced an an output of high level language program? [closed] 【发布时间】:2015-03-29 07:30:19 【问题描述】:我了解到编译器生成目标代码作为输出或汇编语言程序。
那么我可以看到作为高级语言程序输出的汇编语言程序吗?
【问题讨论】:
是的,你可以,但具体的方法取决于你使用的语言 /platform/IDE/OS/compiler。您还没有标记特定语言,您能提供更多详细信息吗? 任何 C 或 C++ 编译器都可以选择生成汇编列表。任何体面的调试器都可以让您在调试时查看机器代码。请记住,这是一种令人羞愧的体验,现代 C 编译器非常擅长生成快速代码。以一种看起来并不总是很直观的方式,当您编写自己的程序集时,您永远不会执行诸如手动展开循环之类的操作。 这是一个具体的例子:***.com/q/28706850/120163 【参考方案1】:由于您没有说明您使用的是哪种语言,我假设它是一种本地语言(即一种翻译成汇编的语言,如 C 而不是字节码,如 java)。 在这种情况下,您可以使用 objdump -D 来生成程序集输出:
objdump -D [yourfile]
【讨论】:
这也适用于 Windows 吗? 我猜你可以找到适用于 Windows 的 objdump 版本,但更好的选择是使用 IDA。您可以在这里免费下载(用于非商业用途):out7.hex-rays.com/files/idafree50.exe【参考方案2】:我为此写了一篇教程,http://www.staerk.de/thorsten/Assembler_Tutorial#translate_C_to_assembler 有一个C程序
#include <stdio.h>
int main()
int i=0x23;
printf("hello world");
并在Linux下用命令翻译
gcc -o hello.asm -S assembler_file.S
汇编代码如下:
movl $.LC0, %edi
movl $0, %eax
call printf
请注意,这种方式是 gcc 特有的。获取汇编代码的另一种方法当然是构建可执行程序,然后使用 objdump -d 进行反汇编。这适用于任何编译器。
【讨论】:
【参考方案3】:日期:Q4_ASEM.BAS 展台:05.06.88 微软快速基础 4.0
DEFINT A-Z
DECLARE FUNCTION Addieren (A AS INTEGER, B AS INTEGER)
' Assembler-Funktion --^
PRINT " QuickBASIC ruft Assembler"
INPUT " A = "; A
INPUT " B = "; B
Ergebnis = Addieren(A, B)
PRINT "Ergebnis ="; Ergebnis
'------------------------------
' Objektdatei mit BC erstellen
' C>bc a:q4_asem
大井:BASIC.ASM 展台:05.06.88 微软宏汇编器 5.0
.MODEL medium
.CODE
PUBLIC Addieren
Addieren PROC
push bp
mov bp,sp
mov bx,[bp+8]
mov ax,[bx]
mov bx,[bp+6]
mov cx,[bx]
shl ax,1
shl ax,1
add ax,cx
pop bp
ret 4
Addieren ENDP
END
;---------------------------------------
; C>masm basic
; C>link
; Object Modules [.OBJ]: q4_asem+basic
;---------------------------------------
【讨论】:
这与原帖有什么关系??以上是关于我可以看到汇编语言程序产生高级语言程序的输出吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章