无法使用fwrite编辑一个二进制程序并编写一个int?

问题描述

我正在尝试制作一个程序,使用fwritefseek将数字写到两个不同的文件(二进制elf文件)偏移量中,但是两者似乎都报告正确写入和查找,但是{{1 }}似乎没有变化。 objdump -s 0x2db0 -n 0x16 testfwrite称为:

fseek

整个程序像波纹管一样执行,应该在偏移量error = fwrite((void*)&value,sizeof(value),1,file); seek_error = fseek(file,offset,SEEK_SET); 0x119e处写入0x2db0

0x01

因此,运行./patch test 0x01 0x2db0 0x119e 时不会出现两个偏移处的119e似乎根本没有变化。

整个源代码是:(主要检查函数的返回值)

objdump

解决方法

您正在使用fopen(argv[1],"ab")以附加模式打开文件。因此,所有写操作都在文件末尾完成,而忽略了您要查找的位置。

改为使用fopen(argv[1],"rb+")r表示以读取模式打开它,因此不会先清空文件,而+表示也允许写入。