我正在尝试创建一个可以修改已编译(或等效)文件的程序。问题是要在编译文件中找到不同的值,我设法找到字符串值,而不是整数值。
到目前为止,我所做的是将编译后的文件作为输入并生成“人类可读”的新文件,基本上我逐字节读取编译后的文件并将每个字节写为新文件。位字符串,例如原始文件中值为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:
编辑:强调我使用无优化标志-O0进行编译可能很重要。
答案 0 :(得分:4)
您可能正在使用以Little-endian顺序存储整数的Intel计算机。您需要搜索10111000 00001011
(以二进制形式编写-与以前使用的字节顺序相反的字节)或0xB8 0x0B
以十六进制字节为单位。