#c #linux #gdb
#c #linux #gdb
Вопрос:
int goo(int g)
{
int filedesc = open("testfile.txt", O_WRONLY | O_APPEND);
}
int foo(int f)
{
goo(2);
}
int main()
{
foo(1);
}
gcc no_symbol.c -o no_symbol
В GDB
(gdb) r
Starting program: /home/samuel/project/no_symbol
Breakpoint 1, 0x000055555555463e in goo ()
(gdb) bt full
#0 0x000055555555463e in goo ()
No symbol table info available.
#1 0x0000555555554676 in foo ()
No symbol table info available.
#2 0x0000555555554687 in main ()
No symbol table info available.
Есть ли какой-либо способ узнать значения g и f без исходного кода?
Комментарии:
1. Вам нужна эта
using namespace
штука на C, как вы делаете на C ? Я предполагаюtestfile.txt
, что она находится в том же каталоге, что и ваш основной файл, верно?2. testfile.txt в том же каталоге
3. Попробуйте
info args
напечатать аргументы во фрейме стека.4. Информация о таблице символов недоступна.
5. Вам придется прибегнуть к отладке на уровне сборки. Сбросьте сборку в файл, используя
objdump
, затем полагайтесь наgdb
поддержку пошагового выполнения инструкций по сборке. Конечно, для этой цели существуют гораздо более продвинутые инструменты, такие как Hex Rays Ida.