Я изучаю реверсирование программы, и мне было интересно, если я скомпилирую с отладочной информацией:
gcc -g ....
Помогает ли это как-то обратному процессу? я даю дополнительную информацию, если я это сделаю? Информации по теме не нашел.
Что вы подразумеваете под реверс-инжинирингом, что вы ожидаете от него? (например, у некоторых разработчиков моделей UML есть обратное заполнение модели UML из источники). Отладочная информация, создаваемая опцией -g, обычно используется отладчиком для связывания адреса со строкой в функции/операции, чтобы узнать, где находятся переменные в памяти/стеке и т. д., но это не обратный инжиниринг.
Все -g должно влиять на то, генерируется ли символическая отладочная информация во время компиляции + компоновки. На самом деле это не должно влиять на генерацию код. Тем не менее, является ли ваш вопрос настоящий, делает ли компиляция с -g каким-то образом код твой более легким для обратного проектирования кто-то еще?
@WhozCraig Да, это именно то, о чем я спрашиваю..





Это помогает, добавляя номера строк, имена файлов, определения макросов и тому подобное к результирующему двоичному файлу. Однако он не включает полный исходный код программы внутри самой программы.
Вот пример определения макроса, включенного в результирующий файл:
username@localhost /path/to/source/code $ gcc test.c -Wall -Wextra -gdwarf-4 -g3
username@localhost /path/to/source/code $ grep __STDC_VERSION__ a.out
Binary file a.out matches
Отладочная информация более полезна для декомпиляции при компиляции с помощью -g3, как показано в приведенном выше примере.
Итак, ответ на ваш вопрос: он дает немного дополнительной информации, которая может быть полезна при декомпиляции, но недостаточно для успешной декомпиляции и перекомпиляции программы. Если возможно, просто дайте исходный код человеку.
Если вы хотите предотвратить декомпиляцию своего кода, просто запустите strip вот так после сборки и отладки вашей программы:
strip program-file
-g не должен влиять на генерацию кода, он просто добавляет в результирующий программный файл информацию, полезную только для отладчика.
Если вы хотите запретить кому-либо дизассемблировать или декомпилировать ваше программное обеспечение, просто включите это в свою лицензию.
определение/использование макросов исчезает до при компиляции во время предварительной обработки и не может быть частью отладочной информации
Информация включена в двоичный файл. Просто grep что-то скомпилированное с -g3 для __STDC_VERSION__ и вы увидите.
сделайте #define AZE 1 int main() { return AZE; } (минимум 2 строки, конечно) и скомпилируйте с -g, и вы не увидите АЗЕ в бинарном/исполняемом файле, вы также можете скомпилировать с опцией -E и проверить, что АЗЕ не появляется в результате препроцессинга
@bruno Извините, эта конкретная отладочная информация появляется только при компиляции с помощью -g3.
хорошо с -g3 у вас есть определение АЗЕ (я этого не знал, спасибо, что научили меня этому), но не то, где оно используется в источнике, поэтому интерес очень ограничен (на самом деле я не вижу, что он может быть ^^)
@bruno Номер строки включается не как строка, а как целое число с исходным порядком байтов. Отладчик будет более полезен при тестировании для этого.
Может быть, я не ясно выразился. Я имел в виду, если я скомпилирую свою программу с параметрами -g, -g3 или w/e , поможет ли это как-то другому выполнить обратный инжиниринг моей программы?
@саги Немного. Если возможно, просто дайте им исходный код.
Я имею в виду, что хочу предотвратить реверсирование моего кода. Влияет ли на это как-то такая компиляция или это просто не имеет значения?
@sagi Вы хотите предотвратить декомпиляцию своего кода? Если это так, просто запустите strip после сборки.
Вы упускаете мою мысль. Я не спрашиваю, как это сделать, я спрашиваю, скомпрометирует ли это каким-то образом компиляция таким образом.
Нет. Ни в коем случае никто и никогда не получит работающую программу от декомпиляции софта. Просто напишите лицензию, запрещающую декомпиляцию и дизассемблирование.
отладочная информация не предоставляет такую информацию. Возможно, чтение о дизассемблеры поможет.