Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
 Аватар для KoTTBarsik
4 / 4 / 0
Регистрация: 13.09.2018
Сообщений: 106

Найти код программы C++ в ассемблерном отладчике

31.08.2022, 15:44. Показов 3725. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как найти код программы C++ в ассемблерном отладчике когда там такая абракадабра?

Вот код программы:

Code
1
2
3
4
5
6
7
int main(){
 
    int a = 0;
    a = 0xF;
 
    return 0;
}
Откуда весь этот мусор ведь код почти стерильный?
Миниатюры
Найти код программы C++ в ассемблерном отладчике  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.08.2022, 15:44
Ответы с готовыми решениями:

Машинный код в отладчике
.586 .model flat, stdcall _data segment a db 8,9,25,0,8,5 b db 15 dup(?) _data ends _data segment start: mov...

Задание аргументов программы в отладчике OllyDbg v2.00.01
Возникла проблема задания аргументов в отладчике OllyDbg v2.00.01 Нашел пункт меню File->Set new arguments... вписал строку, а при...

Основные приемы отладки программы, понятие об отладчике
1) Основные понятия о вводе\выводе.Методы доступа к записям файла. Основные понятия для прямого и последовательного метода доступа....

47
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420
11.09.2022, 10:55
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от DrOffset Посмотреть сообщение
Значит "выставляй настройки компилятора, характерные для версии приложения, предназначенной для конечного пользователя, и собирай с этими настройками". У Visual Studio и многих других IDE прямо явным текстом есть такой режим настроек - Release.
У меня Билдер, там есть настойках кнопка Release, при нажатии на которую сбрасываются некоторые флажки настроек. И больше ничего.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13211 / 6844 / 1824
Регистрация: 18.10.2014
Сообщений: 17,316
11.09.2022, 10:55
Цитата Сообщение от KoTTBarsik Посмотреть сообщение
Вот код программы:
Это "код программы" будет выкинут нафиг любым компилятором, ибо он почти ничего не делает. Все, что делает ваш код - это возвращает 0 из main. Неудивительно, что такую малость найти в ворохе служебного кода может быть трудно.
0
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420
11.09.2022, 10:58
Цитата Сообщение от DrOffset Посмотреть сообщение
Дополнительная информация о коде для отладчика. Чтобы в режиме отладки можно было вам показывать строки кода, смотреть значения переменных и т.п.
Я пишу в Билдере, а отлаживаю в оллидебагере, так вот мне нужно найти место в коде, где есть ошибка, по той ассемблерной строке, на которую указывает олли.
0
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
11.09.2022, 10:58
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В объектном коде уже сто лет как не бывает никакой отладочной информации. Отладочную информацию уже давно принято хранить в посторонней базе денных, рядом с объектным кодом.
Ну по умолчанию тот же gcc сует отладочную информацию именно в объектный код.
И если используется IDE с настройками по умолчанию, то в режиме debug отладочная информация будет именно в объектном коде.
А что принято или не принято - это уже вопрос второй.
0
2410 / 1942 / 764
Регистрация: 27.07.2012
Сообщений: 5,578
11.09.2022, 11:02
Цитата Сообщение от Инженер_3 Посмотреть сообщение
У меня Билдер, там есть настойках кнопка Release, при нажатии на которую сбрасываются некоторые флажки настроек. И больше ничего.
Так после переключения код надо пересобрать (Rebuild или как там оно будет в Билдере).
1
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420
11.09.2022, 11:02
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Релиз - это оптимизированный код.
По-моему, оптимизировать программу можно до бесконечности, но где та граница, когда можно использовать слово "Релиз".
А может и просто работающий код можно называть Релизом?
0
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
11.09.2022, 11:05
Цитата Сообщение от Инженер_3 Посмотреть сообщение
У меня Билдер, там есть настойках кнопка Release, при нажатии на которую сбрасываются некоторые флажки настроек. И больше ничего.
Ну вот это оно и есть.

Цитата Сообщение от Инженер_3 Посмотреть сообщение
Я пишу в Билдере, а отлаживаю в оллидебагере, так вот мне нужно найти место в коде, где есть ошибка, по той ассемблерной строке, на которую указывает олли.
Может для начала стоит попробовать отладку в родном билдеровском отладчике?

Добавлено через 1 минуту
Цитата Сообщение от Инженер_3 Посмотреть сообщение
По-моему, оптимизировать программу можно до бесконечности,
Здесь имеются в виду оптимизации компилятора, а не программиста.
1
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420
11.09.2022, 11:10
Цитата Сообщение от John Prick Посмотреть сообщение
Так после переключения код надо пересобрать (Rebuild или как там оно будет в Билдере).
Лично я никогда ничего не "собирал" и не "пересобирал" - нажимаю кнопку Run и Билдер (линкует, компилирует, собирает, ... ) выдаёт готовый exe-файл.

Добавлено через 4 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
Может для начала стоит попробовать отладку в родном билдеровском отладчике?
Да проблема в том, что приложение есть, код есть, но сам код немного урезан и его напрямую в Билдере не запустить.
А как можно, хотя бы примерно, найти строку или место в коде, по ассемблерной строке в отладчике?
0
2410 / 1942 / 764
Регистрация: 27.07.2012
Сообщений: 5,578
11.09.2022, 11:13
Цитата Сообщение от Инженер_3 Посмотреть сообщение
По-моему, оптимизировать программу можно до бесконечности, но где та граница, когда можно использовать слово "Релиз".
А может и просто работающий код можно называть Релизом?
Это всё некоторые условности для простоты. Никто не станет говорить "Собрать код с отладочной информацией и отключённой оптимизацией ...", скажут просто "Собрать в дебаге".

Другое дело, что программа, собранная в дебаге, может использовать какие-то библиотеки или версии библиотек, которых у конечного пользователя может и не быть. И тогда программа у него не запустится, хотя сама по себе она будет без ошибок.

Добавлено через 2 минуты
Цитата Сообщение от Инженер_3 Посмотреть сообщение
Лично я никогда ничего не "собирал" и не "пересобирал" - нажимаю кнопку Run и Билдер (линкует, компилирует, собирает, ... ) выдаёт готовый exe-файл.
Если вам сказать "постирай", вы ведь не будете говорить "Лично я никогда ничего не стирал, я гружу всё в машину и нажимаю Run".
1
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420
11.09.2022, 11:20
И всё же, как можно найти место в коде программы по ассемблерной строке в отладчике?
0
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
11.09.2022, 11:41
Цитата Сообщение от Инженер_3 Посмотреть сообщение
И всё же, как можно найти место в коде программы по ассемблерной строке в отладчике?
В общем случае - это творческая работа и однозначного рецепта нет.

Как вариант, попробуйте начать с использования Hex-Rays в IDA.
1
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420
11.09.2022, 13:07
Цитата Сообщение от DrOffset Посмотреть сообщение
В общем случае - это творческая работа и однозначного рецепта нет.
Как вариант, попробуйте начать с использования Hex-Rays в IDA.
Ну хоть спасибо и на этом - буду свой рецепт придумывать, а ИДУ, да ну её - нет времени на поиск, установку, изучение и т.п.
0
2410 / 1942 / 764
Регистрация: 27.07.2012
Сообщений: 5,578
11.09.2022, 13:13
Цитата Сообщение от Инженер_3 Посмотреть сообщение
Я пишу в Билдере, а отлаживаю в оллидебагере, так вот мне нужно найти место в коде, где есть ошибка, по той ассемблерной строке, на которую указывает олли.
Вполне возможно, что ошибка возникает в одной из подключенных скомпилированных библиотек. Тогда естественно, что самой строки кода отладчик и не покажет, так как нет её. Здесь ли по call-stack посмотреть, откуда был вход в библиотечные функции, либо методом проб и ошибок ставить точки останова и смотреть, в какой момент программа ещё "жива", и до какой точки останова не доходит. А сама по себе ассемблерная строка тут мало информации несёт.
1
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420
11.09.2022, 19:36
Цитата Сообщение от John Prick Посмотреть сообщение
Вполне возможно, что ошибка возникает в одной из подключенных скомпилированных библиотек. Тогда естественно, что самой строки кода отладчик и не покажет, так как нет её. Здесь ли по call-stack посмотреть, откуда был вход в библиотечные функции, либо методом проб и ошибок ставить точки останова и смотреть, в какой момент программа ещё "жива", и до какой точки останова не доходит. А сама по себе ассемблерная строка тут мало информации несёт.
У меня такие же мысли возникали, что это ошибка не моей функции, т.к. я определил примерные адреса своих функций, они от 0x00402000 до 0x004fee00 (данные примерные), а адрес ошибки примерно 0x00520000. Поэтому что-то там чужое.

А как может появляться ошибка в подключаемой библиотеке (это которые user32 и kernel32) ?
0
2410 / 1942 / 764
Регистрация: 27.07.2012
Сообщений: 5,578
11.09.2022, 20:19
Цитата Сообщение от Инженер_3 Посмотреть сообщение
У меня такие же мысли возникали, что это ошибка не моей функции
Нет, ошибки как раз в вашем коде, просто падение происходит где-то в недрах подключаемых библиотек. Проще говоря - порча памяти.
Цитата Сообщение от Инженер_3 Посмотреть сообщение
А как может появляться ошибка в подключаемой библиотеке (это которые user32 и kernel32) ?
Это сильно врядли. Ищите в своём коде.
1
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
11.09.2022, 20:26
Цитата Сообщение от Инженер_3 Посмотреть сообщение
И всё же, как можно найти место в коде программы по ассемблерной строке в отладчике?
никак
компиляция необратимый процесс каждый компилятор создает код по своему
например код на высоком уровне выглядит так
C++
1
a/=10;
а компилятор спокойно может подменить это умножением
рекомендую почитать Крис Касперски "Техника отладки программ без исходных текстов" и иже с ним
1
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
12.09.2022, 10:26
Цитата Сообщение от KoTTBarsik Посмотреть сообщение
Это совсем не то что мне нужно, мне не интересно интерпретация c++ кода в ассемблерный.
Тогда вообще не понятно что тебе нужно.
Можешь внятно объяснить?

PS
Телепатор подсказывает, что, вероятно, юный падаван желает видеть в отладчике C++ текст программы и его отлаживать.
А что за отладчик? что за программа на скриншоте?
0
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420
12.09.2022, 17:06
Цитата Сообщение от John Prick Посмотреть сообщение
Нет, ошибки как раз в вашем коде, просто падение происходит где-то в недрах подключаемых библиотек. Проще говоря - порча памяти.
Отладчик постоянно выдаёт вот эту строку ошибочной:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
0051EB84  /$ 53             PUSH EBX
0051EB85  |. 3B05 04FD6000  CMP EAX,DWORD PTR DS:[60FD04]
0051EB8B  |. 75 09          JNZ SHORT Шахматка.0051EB96
0051EB8D  |. 8B50 04        MOV EDX,DWORD PTR DS:[EAX+4]
0051EB90  |. 8915 04FD6000  MOV DWORD PTR DS:[60FD04],EDX
0051EB96  |> 8B50 04        MOV EDX,DWORD PTR DS:[EAX+4]
0051EB99  |. 8B48 08        MOV ECX,DWORD PTR DS:[EAX+8]
0051EB9C  |. 81F9 00100000  CMP ECX,1000
0051EBA2  |. 7F 38          JG SHORT Шахматка.0051EBDC
0051EBA4  |. 3BC2           CMP EAX,EDX
0051EBA6  |. 75 17          JNZ SHORT Шахматка.0051EBBF
0051EBA8  |. 85C9           TEST ECX,ECX
0051EBAA  |. 79 03          JNS SHORT Шахматка.0051EBAF
0051EBAC  |. 83C1 03        ADD ECX,3
0051EBAF  |> C1F9 02        SAR ECX,2
0051EBB2  |. A1 10FD6000    MOV EAX,DWORD PTR DS:[60FD10]
0051EBB7  |. 33D2           XOR EDX,EDX
0051EBB9  |. 895488 F4      MOV DWORD PTR DS:[EAX+ECX*4-C],EDX
0051EBBD  |. EB 24          JMP SHORT Шахматка.0051EBE3
0051EBBF  |> 85C9           TEST ECX,ECX
0051EBC1  |. 79 03          JNS SHORT Шахматка.0051EBC6
0051EBC3  |. 83C1 03        ADD ECX,3
0051EBC6  |> C1F9 02        SAR ECX,2
0051EBC9  |. 8B1D 10FD6000  MOV EBX,DWORD PTR DS:[60FD10]
0051EBCF  |. 89548B F4      MOV DWORD PTR DS:[EBX+ECX*4-C],EDX
0051EBD3  |. 8B00           MOV EAX,DWORD PTR DS:[EAX]
0051EBD5  |. 8902           MOV DWORD PTR DS:[EDX],EAX
0051EBD7  |. 8950 04        MOV DWORD PTR DS:[EAX+4],EDX
0051EBDA  |. 5B             POP EBX
0051EBDB  |. C3             RETN
0051EBDC  |> 8B00           MOV EAX,DWORD PTR DS:[EAX]
 
0051EBDE  |. 8902           MOV DWORD PTR DS:[EDX],EAX   ; ERROR
 
0051EBE0  |. 8950 04        MOV DWORD PTR DS:[EAX+4],EDX
0051EBE3  |> 5B             POP EBX
0051EBE4  \. C3             RETN
Но что может быть из кода по адресу > 00510000, если все мои функции лежат по адресам не более 00500000

П.С. Эта ошибка выскакивает не всегда
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
12.09.2022, 20:08
KoTTBarsik и Инженер_3 - одно лицо? вроде одно и тоже спрашивают. Или это вообще про разные случаи разные люди спрашивают?

Цитата Сообщение от Инженер_3 Посмотреть сообщение
Лично я никогда ничего не "собирал" и не "пересобирал" - нажимаю кнопку Run и Билдер (линкует, компилирует, собирает, ... ) выдаёт готовый exe-файл.
И тут же:
Цитата Сообщение от Инженер_3 Посмотреть сообщение
Да проблема в том, что приложение есть, код есть, но сам код немного урезан и его напрямую в Билдере не запустить.
Это как?? так вы собираете в билдере или нет? Если обираете - то в чем сложность запустить в билдеровском отладчике?
Суть вопроса не поймать вас на противоречиях, а выудить реальную информацию а не фантазии.

И еще: я верно понимаю, что проведенный исходно текст программы "для примера" (в первом посте) не имеет отношения к реальной проблеме со "взрывым" реального приложения?

Вероятнее всего , собирая в билдере, вы не сможете воспользоваться оли-дебаггером. Но если уж вы билдером собираете - то вполне можете в нем же и запустить ваше приложение для отладки, я уверен.
Ну либо собирать надо другим инструментарием, не билдером, чтобы в оли-дебагере отлаживать.
Короче если вы не увидеть в пошаговом отладчике вашего C++ кода - то по голому ассемблеру да еще не имея навыков на реальном большом проекте найти концы - нереально.
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13211 / 6844 / 1824
Регистрация: 18.10.2014
Сообщений: 17,316
12.09.2022, 20:17
Цитата Сообщение от Инженер_3 Посмотреть сообщение
Но что может быть из кода по адресу > 00510000, если все мои функции лежат по адресам не более 00500000
Откуда вы взяли такую инофрмацию? По 0051EB9C сидит сравнение с 1000. С этим значением сравниваются данные, прочитанные из некоего агрегата по смещению 8 (третье по счету поле?).

В коде должно фигурировать некое 1000?

Цитата Сообщение от Инженер_3 Посмотреть сообщение
Отладчик постоянно выдаёт вот эту строку ошибочной:
В регистре EDX - неправильный адрес. Регистр EDX - указатель, прочитанный из вышеупомянутого агрегата по смещению 4 (второе по счету поле?).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.09.2022, 20:17

Исправить ошибки в отладчике не меняя смысл программы, спасибо
#include <stdio.h> #include <string.h> #include <locale.h> #include <stdlib.h> //Создаём структуру (имя, фамилия и день рождения...

Как редактировать код java script в отладчике Firefox?
Как редактировать код java script в отладчике Firefox?

Код для masm32 компилируется, но в отладчике выглядит совершенно другим
.486 .model flat, stdcall includelib \masm\lib\kernel32.lib ExitProcess proto :DWORD .code start: mov eax, 2 add eax, 3 ...

Как воспроизводить dll-файлы и код их чтения на отладчике xdbg? (FASM)
Как воспроизводить dll-файлы и их чтение на отладчике xdbg? (FASM)

Ошибки в ассемблерном коде
Доброго времени суток! Написал данную программу. Не могу найти какие либо ошибки, но они есть. Жалуется на переопределение и параметры...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru