当前位置: 首页 > 知识库问答 >
问题:

如何读取Visual C 2010生成的程序集输出?

微生承业
2023-03-14

我有以下C代码:

int main()
{
    int i;
    int j;
    i = 1111;
    j = 2222;

    return 0;
}

我想查看此C代码编译为什么汇编代码,因此选择了以下选项:

此选项将输出每个C语句并直接在其下输出它对应的Assembly指令。但是有些C语句不对应于任何汇编指令(例如:int i;)。所以我想确保在阅读生成的汇编代码时我的以下假设是正确的:

共有2个答案

松钟展
2023-03-14

我认为(出于教育目的)应该将这些语句放在函数中,然后从main调用函数,然后(在main函数中):

sub esp, 216                ; 000000d8H

成为:

sub esp, 192                ; 000000c0H

以及:

lea edi, DWORD PTR [ebp-216]

成为:

lea edi, DWORD PTR [ebp-192]

发生的事情是这些指令在堆栈中为i和j保留内存。所以有机器指令(除了通常有其他值外,它们将始终存在),但您需要了解发生了什么才能了解指令是什么。216值将用于包含i和j定义的函数中(假设没有其他定义)。

请注意,为“i”设置值的mov指令正在使用ebp寄存器。该寄存器指向堆栈。所以我认为您可以假设指令是唯一的指令。

江鹏飞
2023-03-14

int i; int j;只是变量声明...它们甚至没有被声明初始化,因此从这个意义上说,这两行没有明确的汇编指令...但是请注意,局部变量声明确实会导致堆栈上这些局部变量的分配。

是的,对于你问题的后半部分,1111只对应于1111

 类似资料:
  • 问题内容: 我编写了一个简单的Java程序,该程序每5秒就会向std输出一些“ hello”。 然后我编译它并得到一个.class。 我编写了另一个Java程序来运行它并获得输出: 但是它总是打印: 哪里错了?我的操作系统是“ Windows XP”。 问题答案: 到达流的末尾时将返回。 因为您基本上是在忽略此退出指示器并无限循环地循环,所以您得到的只是。 可能的原因是因为该进程已向错误流输出了一

  • 我最近想出了如何在汇编中写入 stdout,但现在无法从 stdin 中读取,并将我读取的内容输出回 stdout。这是我到目前为止的代码: 我很确定我看错了。我很确定和的行为没有达到预期(如果我将 替换为 次),这是导致我的问题的原因(当我输入输入并点击return时,它什么也不显示)。 我已经摸索了一段时间了,希望能得到任何帮助。(我这么做只是为了了解这不是家庭作业)。 我的问题本质上是我做错

  • 这是我的pom.xml文件和错误我得到当建设 错误: 在项目load-xml-to-s3上执行目标org.apache.maven.plugins失败:maven-汇编-插件:2.2-beta-5:单个(默认为cli):读取程序集出错:找不到程序集描述符。

  • 问题内容: 我有一个Java应用程序,该应用程序存在一些性能问题,有人建议我以verbose:gc模式运行它。这已经完成,但是我不知道如何解释日志记录。是否可以向我解释这一切的含义,或者为我提供提高性能的建议? 可以在以下位置找到输出日志:http : //pastebin.com/uDNPEGcd 在此先感谢您,马尔滕 问题答案: 在每个gc集合之后立即打印,并打印有关每个世代内存详细信息的详细

  • 问题内容: 我想制作一个Servlet过滤器,该过滤器将在处理和完成响应后读取响应的内容,并以XML或PDF或其他方式返回该信息。但是我不确定如何从HttpServletResponse对象中获取任何信息。我如何获得此信息? 问题答案: 将此添加到过滤器java文件。 使用以下代码: 现在,content变量具有输出流。您也可以对二进制内容执行此操作。

  • 我正在尝试使用< code > DataSet . writeastext(" file:///path/to/my/file ")将数据集API程序的结果写入一个文件。 但是,该程序不产生任何输出。也不会创建输出文件。这可能是什么原因?