我可以看到汇编语言程序产生高级语言程序的输出吗? [关闭]

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
;---------------------------------------

【讨论】:

这与原帖有什么关系??

以上是关于我可以看到汇编语言程序产生高级语言程序的输出吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

任何人都可以看到我的错误吗?切换语句

一个VB程序的编写,高手进来看看,追加至最高分!

Spark支持通过GO语言编写程序吗

Java语言,编写一个程序能将用户输入的个任意长度的整数,求出各个位上的数,并逆序输出。

下列选择中,啥是一种高级语言windows excel

Tiny语言编译器简单介绍