assembly - x86 中变量的大小

标签 assembly disassembly

C 文件中定义的变量的大小在编译后的代码的汇编等效项中出现在哪里?

假设您的第一个代码是:

char buffer[2];
char a[3];

你的下一个代码是:

char buffer[3];
char a[2];

其中“buffer”和“a”是函数的局部变量。

在这两种情况下,当您进入函数时,esp 都会减少相同数量的字节,但是如果您无法访问源代码,那么有什么办法可以区分边界吗?你只是反汇编二进制文件?

我想知道二进制文件中是否有一段记录变量的大小。

最佳答案

据我所知,判断这种情况的唯一方法是查看堆栈的使用情况。

一旦代码被编译为汇编,类型信息并没有真正保留下来,唯一可以推断的是所使用的汇编指令的类型(无论它们是对位、字、双字等进行操作)

IDA Pro 具有反汇编为 C 的功能,通常大部分情况下都是准确的,它不会在大多数情况下减少为工作 C,但在快速分析 ASM 方面非常强大。它所做的一件事是找出数组的大小,但是很多时候它只会将它们键入为字节(或字符)数组,您可能必须分析代码以查看其使用方式。

关于assembly - x86 中变量的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15003320/

相关文章:

android-studio - 用于显示 CPU 寄存器和指令的 Android Studio 工具

c - 理解反汇编——看两个 main() 的

使用 OpenWatcom 编译并链接到 C 语言的二进制简单实模式操作系统

c - 需要帮助在给定 64 位汇编指令的情况下在 C 中构建 Long loop(long x, int n) 函数

assembly - 当中断发生时,x86 架构中会发生什么?

assembly - lea 0x0(%esi),%esi 是什么意思

c - subq $40 %rsp 与 AS 崩溃但 GCC 没有

assembly - 操作系统开发 - 在保护模式下执行第一条指令

assembly - VMULL中的最后一个L在arm neon汇编语言中意味着什么

dos - x86分割、DOS、MZ文件格式、反汇编