编译后如何将整数存储在二进制文件中?

时间:2019-03-23 20:55:49

标签: c compilation

我正在尝试创建一个可以修改已编译(或等效)文件的程序。问题是要在编译文件中找到不同的值,我设法找到字符串值,而不是整数值。

到目前为止,我所做的是将编译后的文件作为输入并生成“人类可读”的新文件,基本上我逐字节读取编译后的文件并将每个字节写为新文件。位字符串,例如原始文件中值为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进行编译可能很重要。

1 个答案:

答案 0 :(得分:4)

您可能正在使用以Little-endian顺序存储整数的Intel计算机。您需要搜索10111000 00001011(以二进制形式编写-与以前使用的字节顺序相反的字节)或0xB8 0x0B以十六进制字节为单位。