Я пытаюсь создать программу, которая может изменять скомпилированный (или эквивалентный) файл. Проблема в том, чтобы найти различные значения в скомпилированном файле, мне удается найти строковые значения, но не целочисленные значения.
Что я сделал до сих пор, так это то, что я беру скомпилированный файл в качестве входных данных и создаю новый файл, «читаемый человеком», в основном я читаю байт за байтом скомпилированного файла и записываю каждый байт в новый файл как строка битов, например, байт в исходном файле со значением 124 становится «01111100» в новом файле. Кажется, это работает нормально, я могу выполнить обратную операцию над «читаемым человеком» файлом и запустить его.
#include <stdlib.h>
#include <stdio.h>
int main()
{
printf("Hello world!\n");
return 0;
}
Например, если я скомпилирую и переведу выходной файл с кодом выше, я найду последовательность битов, соответствующую "Hello world! \ N".
Но в приведенном ниже коде при переводе выходного файла после его компиляции я не могу найти что-то, соответствующее 3000 (ищу ли я целое число или строку, соответствующую 3000).
#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.