在编译后,C文件中定义的变量大小出现在代码的程序集等价物中?
想象一下你的第一个代码是:
char buffer[2];
char a[3];
,您的下一个代码是:
char buffer[3];
char a[2];
其中“buffer”和“a”是函数的局部变量。
在这两种情况下,当您输入函数时,esp
减少了相同的字节数,但是如果您无法访问源代码并且您只是拆解二进制文件?
我想知道二进制文件中是否有一个段跟踪变量的大小。
答案 0 :(得分:4)
据我所知,在这种情况下告诉的唯一方法是查看堆栈的使用方式。
将代码编译为程序集后,类型信息并未真正保留,唯一可以推断的是所使用的汇编指令的类型(无论它们是对位,字,双字等进行操作)
IDA Pro具有对C功能的反汇编,通常大多数都是准确的,它在大多数情况下不会降低到工作C,但在快速分析ASM方面非常强大。它做的一件事就是找出数组的大小,但是很多时候它只会将它们作为字节(或字符)数组输入,你可能需要分析代码才能看到它的使用方式。
答案 1 :(得分:1)
我想知道二进制文件中是否有一个段跟踪变量的大小。
不,没有。
最多可以找到变量的相对偏移量以及分配的总堆栈数。
答案 2 :(得分:0)
通常它放在一个单独的文件中(或者更常见的是:无处),但是调试信息(例如)可能保存在二进制文件中。显然,您不能依赖它,但如果您可以控制二进制文件的生成,则可以安排信息存在。