Я недавно интересовался чтением книг и статей о взломе, и я узнал, что Взлом: искусство эксплуатации - это просто обязательное название. Я следую основным учебным пособиям о том, как работать со стандартными инструментами Linux и анализировать ваш код (глава программирования). Я не новичок в программировании, но работа с терминалом Linux для меня совершенно новая. Я использую последнюю версию Kali Linux.(GDB) Точки останова и дизассемблирования
Сейчас моя простая программа, приведенная ниже, должна использоваться для анализа того, как работает сегмент стека.
int main(){
void stack_func(int a,int b, int c, int d){
char first;
int second;
first = 'c';
second = 220;
}
stack_func(1,2,3,4);
return 0;
}
Первая проблема, я не могу добавить любые точки останова для внутренних функций. Ни мои функции, как stack_func(), ни функции из таких библиотек, как strcpy и т. Д. Согласно этой книге ожидаемая точка останова должна быть разрешена. Шахта просто игнорируется, и программа заканчивается.
[email protected]:~/Folder# gdb -q ./stack
Reading symbols from ./stack...done.
(gdb) b stack_func
Function "stack_func" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (stack_func) pending.
(gdb) run
Starting program: /root/Folder/stack
[Inferior 1 (process 20421) exited normally]
(gdb)
Вторая проблема заключается в том, что демонтирует также не работает для моей функции. Опять же в соответствии с книгой я должен уметь видеть код ассемблера для моей функции stack_func(), но результат ниже.
(gdb) disass stack_func()
No symbol "stack_func" in current context.
(gdb)
Приносим извинения за любые грамматические ошибки в тексте. :)
Ваша функция не-побочный эффект, вероятно, просто удаляется компилятором, или по крайней мере, в строгом соответствии. –
Вы пытались переместить 'stack_func' вне' main'? –
Да, я попробовал, чтобы сообщение об ошибке выглядело так. 'Вы не можете сделать это без процесса для отладки. ' – Jacobe