Как мне отладить программу на языке Си без символа отладки в Linux?

#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.