Как определить, сколько аргументов при возврате? - PullRequest
1 голос
/ 15 октября 2011

GCC call proc

Я уже знаю, что вызывающая процедура такая же, как и выше, и хочу написать несколько строк кода, чтобы отследить вызванные функции.Сохраненная цепочка% ebp не проблема.

Но как я могу узнать аргументы и их число только из этой цепочки вызовов?
Я понял, что GDB сделал это хорошо, он печатает что-то вроде:

> #4  0xf0100069 in test_backtrace (x=3) at kern/init.c:16
> #5  0xf0100069 in test_backtrace (x=4) at kern/init.c:16
> #6  0xf0100069 in test_backtrace (x=5) at kern/init.c:16
> #7  0xf01000ea in i386_init () at kern/init.c:39

, которыйозначает, что он точно знает, что аргументы каждой функции.Как это достигается?

Много ткс.

1 Ответ

0 голосов
/ 15 октября 2011

GDB является символическим отладчиком.Он знает, что делать это можно только тогда, когда вы строите свой код с символами отладки, поскольку он делает это, просматривая прототип функции в C. Попробуйте скомпилировать код без символов отладки (потерял -g в CFLAGS), и вы внезапно увидите gdbтеряет способность делать это ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...