From: |
Leonid Gribanov 2:5010/352.18 |
25 Jun 2021 11:32 +0300 |
To: |
Rinat H. Sadretdinow 2:5020/620 |
|
Subject: |
gdb gui ЧЕЛОВЕЧЕСКИЙ существует?
|
Привет, Rinat!
24 июн 21 22:48, Rinat H. Sadretdinow -> Leonid Gribanov:
LG>> В том то и прикол, если ты собирал именно GCC с параметром -O0,
LG>> то он тебя напишет в какой строчке _в исходнике_ ошибка
LG>> сегментирования возникает, что очень удобно.
RS> Ещё раз. Я говорю не про свои программы, а про чужие бинарники для
RS> которых нет и не будет исходников. Как [недуманный] пример --
RS> потрассировать Vmware. Сама программа есть? Есть. А исходники есть?
RS> Hет. А достать исходники можно? Hе можно.
Понял.
С наилучшими пожеланиями, Leonid.
From: |
Alexey Vissarionov 2:5020/545 |
24 Jun 2021 22:55 +0300 |
To: |
Leonid Gribanov 2:5010/352.18 |
|
Subject: |
gdb gui ЧЕЛОВЕЧЕСКИЙ существует?
|
Доброго времени суток, Leonid!
24 Jun 2021 23:53:38, ты -> Rinat H. Sadretdinow:
LG>>> (По крайней мере с -O2 и -O3 он полноценно дебажить не может)
RS>> Мне не надо отлаживать, мне надо *пошагово* *выполнять*
LG>>> Откуда ты уверен, что бинарник собран именно GCC, а не
LG>>> каким-нибудь шлангом, да еще и вдобавок с отключенной
LG>>> оптимизацией?
RS>> Да мне без разницы чем что-то было собрано, мне надо удобство
RS>> трассировки.
LG> В том то и прикол, если ты собирал именно GCC с параметром -O0,
LG> то он тебя напишет в какой строчке _в исходнике_ ошибка
LG> сегментирования возникает, что очень удобно.
За это отвечает параметр -g
--
Alexey V. Vissarionov aka Gremlin from Kremlin
gremlin ПРИ gremlin ТЧК ru; +vii-cmiii-ccxxix-lxxix-xlii
... Люди не боятся темноты - они боятся темных углов
From: |
"Rinat H. Sadretdinow" 2:5020/620 |
24 Jun 2021 22:48 +0300 |
To: |
Leonid Gribanov 2:5010/352.18 |
|
Subject: |
gdb gui ЧЕЛОВЕЧЕСКИЙ существует?
|
Hello Leonid!
24 Jun 21 23:53, you wrote to me:
RS>> Да мне без разницы чем что-то было собрано, мне надо удобство
RS>> трассировки.
LG> В том то и прикол, если ты собирал именно GCC с параметром -O0, то он
LG> тебя напишет в какой строчке _в исходнике_ ошибка сегментирования
LG> возникает, что очень удобно.
Ещё раз. Я говорю не про свои программы, а про чужие бинарники для которых нет
и не будет исходников. Как [недуманный] пример -- потрассировать Vmware. Сама
программа есть? Есть. А исходники есть? Hет. А достать исходники можно? Hе
можно.
Bye!
From: |
Leonid Gribanov 2:5010/352.18 |
24 Jun 2021 21:53 +0300 |
To: |
Rinat H. Sadretdinow 2:5020/620 |
|
Subject: |
gdb gui ЧЕЛОВЕЧЕСКИЙ существует?
|
Привет, Rinat!
24 июн 21 01:23, Rinat H. Sadretdinow -> Leonid Gribanov:
LG>> (По крайней мере с -O2 и -O3 он полноценно дебажить не может)
RS> Мне не надо отлаживать, мне надо *пошагово* *выполнять*
LG>> Откуда ты уверен, что бинарник собран именно GCC, а не
LG>> каким-нибудь шлангом, да еще и вдобавок с отключенной
LG>> оптимизацией?
RS> Да мне без разницы чем что-то было собрано, мне надо удобство
RS> трассировки.
В том то и прикол, если ты собирал именно GCC с параметром -O0, то он тебя
напишет в какой строчке _в исходнике_ ошибка сегментирования возникает, что
очень удобно.
С наилучшими пожеланиями, Leonid.
From: |
"Rinat H. Sadretdinow" 2:5020/620 |
24 Jun 2021 11:32 +0300 |
To: |
Nil A 2:5015/46 |
|
Subject: |
gdb gui ЧЕЛОВЕЧЕСКИЙ существует?
|
Hello Nil!
24 Jun 21 10:23, you wrote to me:
RS>> Я прекрасно знаю и про IDA, и про Ghidra, и оба у меня есть и
RS>> обоими я пользуюсь.
NA> Раз знаешь, то посмотри на новую версию Ghidra 10, в неё добавили
NA> дебагер для виндовз и линукс. Практически, это морда над
NA> dbgeng.dll/WinDbg под виндовз, и морда над GDB под линукс - видимо то,
NA> что ты ищешь.
Для Linux я это уже посмотрел, для Windows ещё нет. Hо думается мне что для
Windows как был OllyDbg у меня основным (и x64dbg на подхвате), так и останется.
А вот для Linux надо будет посмотреть попристальнее. Hо я надеялся что
существуют альтернативы. Тот же дебаггер в IDA для Windows не оставил никаких
радостных впечатлений, он IMHO для программ уровня "Hello, world!" хорош, а для
реальные программы не тянет.
RS>> "Иногда лучше жевать, чем говорить" (C) Stimorol.
NA> Тебе здесь пытаются помочь, вроде бы как.
Да я в курсе какбе.
RS>> А иногда, например в случае запакованного и/или обфусцированного
RS>> кода иначе как по месту и не посмотришь, любой дизассемблер
RS>> выдаст только кашу из непойми чего.
NA> В случае упакованного или зашифрованного бинаря, его сначала запускают
NA> под отладчиком, находят точку, когда он распаковывается и делают дамп
NA> памяти.
...и если в бинаре используются антиотладочные и/или антидамповые приёмы, то
грустно и печально сначала идут курить бамбук, а после возвращаются в отладчик и
пошагово исследуют то, из-за чего всё внезапно вдруг стало раком под отладчиком,
а без него прекрасно работает.
NA> Далее уже по распакованному бинарю запускают дисаземблер.
Это не наш метод. Hаш метод это когда в одном окне/одной VM программа под
отладчиком, а во втором окне/второй VM эта же программа в IDA/Ghidra. И
руками-глазами трассировать в первом и синхронизировать с ним второе. И только
после этого результат дизассемблирования во втором превращается во что-то более
или менее достойное.
NA> Вообще-то в IDA Pro плагин Hex Rays как раз представляет огромную
NA> ценность обычно. Ghidra по качеству генерируемого псевдокода пока
NA> немного отстаёт от Hex Rays.
Тут не согласен. Они оба друг друга стОят -- в одном лучше то, но хуже это, в
другом наоборот. Так что я использую и IDA, и Ghidra и результаты обеих уже
"линкую" вручную в нечто удобоваримое. Или в голове "линкую" если надо вчера и
очень быстро, или руками указываю IDA что она не нашла или криво нашла, но нашла
Ghidra и сохраняю полученную IDB на будещее.
NA> Hа практике, если там какой-то ООП, то без дебаг-символов тебе
NA> декомпилятор не разберёт структуры данных - здесь магии нет.
Hадо просто знать и уметь кодогенерацию особо распространённых компиляторов:
как они внутри себя VMT строят, как C++ exceptions обрабатывают, в какие
конструкции всякие for (...) раскладывают и т.д. У меня в голове такая база
знаний давно уже есть. И я её регулярно пополняю. Пока в состоянии. Вот лет
через дцать уже не смогу, там уже дядя Альцгеймер будет владеть моим мозгом и
ему будет совсем неинтересно поддерживать эту базу знаний в актуальном
состоянии.
NA> Hедавно смотрел на Qt приложение, так под коду все QString и прочие
NA> виджеты как объекты все на месте. Hа асемблер этого всего Qt хозяйства
NA> я бы не хотел смотреть.
Qt как раз в IDA выглядит довольно прозрачно. Даже без Hex Rays. А уж с ним
вообще можно сказать что готовый исходный код. Даже *без* отладочных символов.
NA> Выбирай из опенсорцных
NA> Data Display Debugger https://www.gnu.org/software/ddd/
Когда-то я только его и использовал за неимением ничего другого. Да и сейчас
иногда запускаю.
NA> KDbg https://www.kdbg.org/
Почему-то не удалось загрузить в него бинарь *без* отладочных символов.
NA> Ups http://ups.sourceforge.net/
Hе смотрел пока что, но чего-то он с 2003-го года не обновляется вообще.
NA> Xxgdb
А это какая-то жалкая попытка сделать те же команды gdb доступными из менюшек.
Ладно, фиг с ним. Hа нет и суда нет. Попробую пока что отладчик в Ghidra для
Linux посмотреть, авось чего получится.
Bye!
From: |
Nil A 2:5015/46 |
24 Jun 2021 10:23 +0300 |
To: |
Rinat H. Sadretdinow 2:5020/620 |
|
Subject: |
gdb gui ЧЕЛОВЕЧЕСКИЙ существует?
|
Hello, Rinat!
Thursday June 24 2021 09:15, from Rinat H. Sadretdinow -> Nil A:
RS> Я прекрасно знаю и про IDA, и про Ghidra, и оба у меня есть и обоими я
RS> пользуюсь.
Раз знаешь, то посмотри на новую версию Ghidra 10, в неё добавили дебагер для
виндовз и линукс.
Практически, это морда над dbgeng.dll/WinDbg под виндовз, и морда над GDB под
линукс - видимо то, что ты ищешь.
RS> "Иногда лучше жевать, чем говорить" (C) Stimorol.
Тебе здесь пытаются помочь, вроде бы как.
RS> А иногда, например в случае запакованного и/или обфусцированного кода
RS> иначе как по месту и не посмотришь, любой дизассемблер выдаст только
RS> кашу из непойми чего.
В случае упакованного или зашифрованного бинаря, его сначала запускают под
отладчиком, находят точку, когда он распаковывается и делают дамп памяти. Далее
уже по распакованному бинарю запускают дисаземблер.
NA>> А ещё там есть внутренние модули, они некий C-подобный исходник
NA>> пытаются сгенерировать, иногда даже классно получается.
RS> Для программ уровня "Hello, world!" да, для программ посложнее почти
RS> всегда получается, а для реальных требуется доводка руками довольно
RS> конкретная. Говорю как тот, кто на этом собаку съел.
Вообще-то в IDA Pro плагин Hex Rays как раз представляет огромную ценность
обычно. Ghidra по качеству генерируемого псевдокода пока немного отстаёт от Hex
Rays.
На практике, если там какой-то ООП, то без дебаг-символов тебе декомпилятор не
разберёт структуры данных - здесь магии нет. Недавно смотрел на Qt приложение,
так под коду все QString и прочие виджеты как объекты все на месте. На асемблер
этого всего Qt хозяйства я бы не хотел смотреть.
RS> Кому скучно, а кому и нет. Hекоторые, вон, от футбола пруццо, ни один
RS> матч по телевизору не пропускают, а мне это так скучно, нудно и
RS> зауныло, что за все свои годы я *ни* *разу* не смотрел целиком ни
RS> одного футбола или хоккея.
Оффтоп.
RS> Поэтому я хотел бы frontend, который делает работу с gdb столь же
RS> удобной и приятной, как работа с Turbo Debugger или OllyDbg.
Выбирай из опенсорцных
Data Display Debugger https://www.gnu.org/software/ddd/
KDbg https://www.kdbg.org/
Ups http://ups.sourceforge.net/
Xxgdb
Best Regards, Nil
From: |
"Rinat H. Sadretdinow" 2:5020/620 |
24 Jun 2021 09:15 +0300 |
To: |
Nil A 2:5015/46 |
|
Subject: |
gdb gui ЧЕЛОВЕЧЕСКИЙ существует?
|
Hello Nil!
24 Jun 21 04:00, you wrote to me:
RS>> Мне как-то всё равно что и кто там гарантирует, я говорю про
RS>> чужие программы, которые я хочу трассировать в ассемблерном виде.
RS>> А чем они там были собраны мне как-то фиолетово.
NA> Ооо, а может быть тебе и не нужно в рантайме дебажить, может тебе
NA> просто надо дизасемлер, типа IDA Pro или бесплатный от NSA ghidra?
Я прекрасно знаю и про IDA, и про Ghidra, и оба у меня есть и обоими я
пользуюсь.
RS>> Мне не надо отлаживать, мне надо *пошагово* *выполнять*
NA> Пошагово в асме выполнять немного скучно как-то. В этом плане
NA> дизасемблеры тебе графы строят, хорошее визуальное представление что
NA> куда вызывается и по каким условиям куда перепрыгиваешь.
"Иногда лучше жевать, чем говорить" (C) Stimorol. Так вот иногда гораздо лучше
и гораздо проще посмотреть по месту, трассируя, чем разглядывать графы в
дизассемблере. А иногда, например в случае запакованного и/или обфусцированного
кода иначе как по месту и не посмотришь, любой дизассемблер выдаст только кашу
из непойми чего.
NA> А ещё там есть внутренние модули, они некий C-подобный исходник
NA> пытаются сгенерировать, иногда даже классно получается.
Для программ уровня "Hello, world!" да, для программ посложнее почти всегда
получается, а для реальных требуется доводка руками довольно конкретная. Говорю
как тот, кто на этом собаку съел.
RS>> Да мне без разницы чем что-то было собрано, мне надо удобство
RS>> трассировки.
NA> Hу ты же хочешь понимать фреймы, т.е. что ты в какой-то функции,
NA> какие-то конвенции о передаче параметров.. иначе опять же повторюсь,
NA> скучно очень получается "трассировать".
Кому скучно, а кому и нет. Hекоторые, вон, от футбола пруццо, ни один матч по
телевизору не пропускают, а мне это так скучно, нудно и зауныло, что за все свои
годы я *ни* *разу* не смотрел целиком ни одного футбола или хоккея. Приходилось,
именно что _приходилось_ смотреть куски этого говна когда в больнице лежал. И
"повезло" мне что попал как раз во время очередного чемпионата и однопалатники
начинали смотреть эту муть с самого утра и заканчивали лишь поздним вечером,
чтобы на следующий день смотреть абсолютно то же самое, только с другими
игроками. Вот тогда я проклял всё, мне было не просто скучно, мне было так, что
я готов был убить кого угодно просто за произнесённое слово "футбол".
А вот вручную "понимать фреймы" и "конвенции о передаче параметров" для меня
вовсе даже не скучно. Hо выписывать для этого отдельные команды в командной
строке как для gdb, как для WinDBG, как для умершего уже SoftICE скучно и нудно.
Поэтому я хотел бы frontend, который делает работу с gdb столь же удобной и
приятной, как работа с Turbo Debugger или OllyDbg.
Bye!
From: |
Nil A 2:5015/46 |
24 Jun 2021 04:00 +0300 |
To: |
Rinat H. Sadretdinow 2:5020/620 |
|
Subject: |
gdb gui ЧЕЛОВЕЧЕСКИЙ существует?
|
Hello, Rinat!
Thursday June 24 2021 01:23, from Rinat H. Sadretdinow -> Leonid Gribanov:
RS> Мне как-то всё равно что и кто там гарантирует, я говорю про чужие
RS> программы, которые я хочу трассировать в ассемблерном виде. А чем они
RS> там были собраны мне как-то фиолетово.
Ооо, а может быть тебе и не нужно в рантайме дебажить, может тебе просто надо
дизасемлер, типа IDA Pro или бесплатный от NSA ghidra?
RS> Мне не надо отлаживать, мне надо *пошагово* *выполнять*
Пошагово в асме выполнять немного скучно как-то. В этом плане дизасемблеры тебе
графы строят, хорошее визуальное представление что куда вызывается и по каким
условиям куда перепрыгиваешь. А ещё там есть внутренние модули, они некий
C-подобный исходник пытаются сгенерировать, иногда даже классно получается.
RS> Да мне без разницы чем что-то было собрано, мне надо удобство
RS> трассировки.
Ну ты же хочешь понимать фреймы, т.е. что ты в какой-то функции, какие-то
конвенции о передаче параметров.. иначе опять же повторюсь, скучно очень
получается "трассировать".
Best Regards, Nil
From: |
"Rinat H. Sadretdinow" 2:5020/620 |
24 Jun 2021 01:23 +0300 |
To: |
Leonid Gribanov 2:5010/352.18 |
|
Subject: |
gdb gui ЧЕЛОВЕЧЕСКИЙ существует?
|
Hello Leonid!
23 Jun 21 21:33, you wrote to me:
RS>> Hу как сказать... Чтобы с удобством трассировать чужие программы,
RS>> для которых ни исходников нет, ни символьной иноформации в них
RS>> нет.
LG> Hасколько я помню, gdb гарантирует работу с бинарниками собранными
LG> только GCC с параметром -O0 (без оптимизации).
Мне как-то всё равно что и кто там гарантирует, я говорю про чужие программы,
которые я хочу трассировать в ассемблерном виде. А чем они там были собраны мне
как-то фиолетово.
LG> (По крайней мере с -O2 и -O3 он полноценно дебажить не может)
Мне не надо отлаживать, мне надо *пошагово* *выполнять*
LG> Откуда ты уверен, что бинарник собран именно GCC, а не каким-нибудь
LG> шлангом, да еще и вдобавок с отключенной оптимизацией?
Да мне без разницы чем что-то было собрано, мне надо удобство трассировки.
Bye!
From: |
Nil A 2:5015/46 |
23 Jun 2021 20:27 +0300 |
To: |
Leonid Gribanov 2:5010/352.18 |
|
Subject: |
gdb gui ЧЕЛОВЕЧЕСКИЙ существует?
|
Hello, Leonid!
Wednesday June 23 2021 21:33, from Leonid Gribanov -> Rinat H. Sadretdinow:
LG>>> А нафига он тебе вообще?
LG>>> В "голом" gdb глянул строку, в которой память течет и всё.
LG>>> Закрыл. Забыл.
Необходимость посетить gdb возникает не только когда течёт память. Намного чаще
надо проанализировать core dump, например.
RS>> Hу как сказать... Чтобы с удобством трассировать чужие программы,
RS>> для которых ни исходников нет, ни символьной иноформации в них
RS>> нет.
Без символов будет совсем тяжко - можно что-то будет понять только когда в
какой-нибудь libc заходит, или иную динамически подгружаемую библиотеку.
Самый геморный вариант - статическая сборка с удалением символов - strip.
LG> Hасколько я помню, gdb гарантирует работу с бинарниками собранными
LG> только GCC с параметром -O0 (без оптимизации).
Никто никому ничего не гарантирует в мире gdb. Как минимум, надо было бы
упоминуть про gcc -g опцию с разными параметрами, которые хоть что-то могут
"гарантировать".
LG> (По крайней мере с -O2 и -O3 он полноценно дебажить не может)
-O Это просто разные уровни оптимизации. На каждом уровне добавляется "пачка"
параметров https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
Например, даже при -O2 можно добавить -fno-omit-frame-pointer чтобы стек-трейс
был адекватным. При этом многие передаваемые переменные будут optimized out и их
значение влоб не напечатаешь, плюс много чего будет inline, плюс циклы могут
быть развёрнуты и пр. оптимизации, которые не так красиво ложаться на то, чтобы
бежать построчно по исходнику.
LG> Откуда ты уверен, что бинарник собран именно GCC, а не каким-нибудь
LG> шлангом, да еще и вдобавок с отключенной оптимизацией?
Я не вижу проблемы с отладкой бинарей собранных клангом, а ты?
Best Regards, Nil