【发布时间】:2019-03-23 20:55:48
【问题描述】:
我正在尝试创建一个可以修改已编译(或等效)文件的程序。问题是在编译文件中定位不同的值,我设法找到字符串值而不是整数值。
到目前为止,我所做的是我将一个编译文件作为输入并生成一个“人类可读”的新文件,基本上我逐字节读取编译文件并将新文件中的每个字节写为位串,例如原始文件中值为 124 的字节在新文件中变为“01111100”。这似乎工作正常,我能够对“人类可读”文件进行反向操作并运行它。
#include <stdlib.h>
#include <stdio.h>
int main()
{
printf("Hello world!\n");
return 0;
}
例如,如果我编译和翻译上面代码的输出文件,我可以找到对应于“Hello world!\n”的位序列。
但是在下面的代码中,编译后翻译输出文件的时候,找不到3000对应的东西(不管是找3000对应的Integer还是String)。
#include <stdlib.h>
#include <stdio.h>
int main()
{
int x = 3000;
printf("%d", x);
return 0;
}
到目前为止,我的猜测是 3000 是以我不知道的方式编写的。尽管我在翻译过程中做错了什么也同样有可能。到目前为止,我已尝试使用以下两个位序列查找 3000:
- 作为整数 00001011 10111000
- 作为字符串 00110011 00110000 00110000 00110000
编辑:强调我使用无优化标志 -O0 进行编译可能很重要。
【问题讨论】:
标签: c compilation