Как я могу отлаживать свой собственный malloc в сборке с помощью GDB в реальной программе, такой как ls?Linux

Ответить
Anonymous
 Как я могу отлаживать свой собственный malloc в сборке с помощью GDB в реальной программе, такой как ls?

Сообщение Anonymous »


Я пытаюсь перекодировать функции malloc (и free, calloc, realloc) в сборке x86_64 ради развлечения. У меня достаточно кода, и он работает, когда я использую эти функции как функцию «my_malloc» в своих собственных файлах C для их тестирования. Но теперь я пытаюсь использовать его с ls, чтобы получить реальный пример. Я получаю сообщение об ошибке сегментации и не знаю, с чего начать отладку.

Я компилирую все эти asm-функции в libmy_malloc.so, и вот что происходит, когда я использую их с ls (по сути, это SEGV):

> LD_PRELOAD=./libmy_malloc.so ls рыба: задание 1, «LD_PRELOAD=./libmy_malloc.so /u…» прекращено сигналом SIGSEGV (ошибка границы адреса) Я не знаю, как начать отладку, потому что в моих собственных тестах все выглядит нормально, но с ls я считаю, что SEGV происходит до основной функции, потому что я использовал gdb чтобы попытаться понять, что происходит, и у меня получилось следующее:

> gdb ls gdb$ сломать malloc Точка останова 1 по адресу 0x4690 gdb$ устанавливает среду LD_PRELOAD=./libmy_malloc.so gdb$ р Во время запуска программа завершилась сигналом SIGSEGV, ошибка сегментации. Я добавил код в свои функции malloc и free, которые печатают что-то, чтобы увидеть, как они использовались до вызова main и malloc не реже одного раза. Я, вероятно, возился с памятью или существуют правила, касающиеся malloc, о которых я не знаю, но теперь я не знаю, что делать, с чего начать, или что делать для отладки или найти дополнительную информацию.

Также, чтобы внести ясность: когда я использую эти функции в своих собственных тестах, я называю их my_malloc, my_free и т. д., но когда я использую их с code>ls Я переименовал их, присвоив правильное имя.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»