Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2018, 11:44   #1
Vasya_Pupking
Новичок
Джуниор
 
Регистрация: 20.03.2018
Сообщений: 9
По умолчанию MASM32 компилирует и линкует без ошибок. но EXE не выполняется

Здравствуйте, я пытаюсь создать консольное приложение на ASM для windows. MASM32 откомпилировал и отлинковал мой ASM код без единой ошибки. Но EXE зависает. При проходе EXE в OllyDBG видно, что в main вход нормальный, но при первом (и всех последующих) call-s СИ-функций (FOPEN, FSCANF, FPRINTF, MALLOC) при call происходит переход за пределы памяти программы и OllyDBG зависает на первом же call. Не пойму, как справится с этой ошибкой - ведь линк прошел без единого сообщения об ошибке. Все внешние ссылки были разрешены ОК. Посмотрите, пожалуйста, мои ASM, OBJ,EXE в облаке по адресу https://drive.google.com/drive/folde...i?usp=sharingh Заранее спасибо!
Vasya_Pupking вне форума Ответить с цитированием
Старый 20.03.2018, 11:53   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

1. А зачем вы выкладываете листинг сгенерированный С/С++ компилятором вместо исходника? При этом выдавая его за свой код?

2. Линк без ошибок не говорит, что программа корректна и зкогда-нибудь завершится. Невыделенная память, выход за границы, вечные циклы и блокировки и т.д.
p51x вне форума Ответить с цитированием
Старый 20.03.2018, 12:07   #3
Vasya_Pupking
Новичок
Джуниор
 
Регистрация: 20.03.2018
Сообщений: 9
По умолчанию

Я не совсем еще пока разбираюсь в АСМ - поэтому сначала написал код на СИ и получил сгенерированный код на АСМ. В чем моя вина? Кстати, исходный СИ код идет абсолютно без ошибок в Microsoft Visual Studio 2017 - так почему сгенерированный им ассемблер не идет? Я пробовал определить внешние функции СИ как: EXTRN C (имя):FAR - не помогло. Линкер создает точно одинаковый EXE, как бы не определять эти СИ функции. А вы что - видите какие-то ошибки в асм коде? Их там не может быть, потому что эквивалентная ему СИ прг идет без ошибок.
Vasya_Pupking вне форума Ответить с цитированием
Старый 20.03.2018, 12:15   #4
Vasya_Pupking
Новичок
Джуниор
 
Регистрация: 20.03.2018
Сообщений: 9
По умолчанию

Я вам конкретно могу сказать - где ошибка - но она не моя и не ошибка АСМ кода - это ошибка скорее всего линка. Вы это можете видеть на скриншоте OllyDBG. В месте, где идет call FOPEN = call DWORD PTR DS:[401036] ( это по IP=00401773) если выполнить этот call, то происходит переход на адрес 202425FF - что вне пределов исходной программы. Как это исправить?
Vasya_Pupking вне форума Ответить с цитированием
Старый 20.03.2018, 12:24   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Вы не указали соглашения о вызовах, вы неправильно определили указатели и вызовы функций (нафига вы это делали раз у вас есть инклуды и либы с масм32 я так и не понял), и т.д.

Цитата:
Сообщение от Vasya_Pupking Посмотреть сообщение
если выполнить этот call, то происходит переход на адрес 202425FF - что вне пределов исходной программы.
А если вызвать что-то из ntdll то там вообще адрес будет страшный.

Цитата:
Сообщение от Vasya_Pupking Посмотреть сообщение
Как это исправить?
Не заниматься ерундой, пытаясь без знаний асма разобрать выхлоп оптимизирующего компилятора с включенными наворотами.

Возьмите ваш исходник на С и прям по нему пишите вызовы на асм. масм32 достаточно высокоуровневый, чтобы такой простейший код мало отличался от С.
p51x вне форума Ответить с цитированием
Старый 20.03.2018, 13:08   #6
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от Vasya_Pupking Посмотреть сообщение
я пытаюсь создать консольное приложение на ASM для windows.
..а что вообще должна делать-то программа?
сгенерированый сишным компилем ASM не будет работать. Его надо править.
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 20.03.2018, 14:04   #7
Vasya_Pupking
Новичок
Джуниор
 
Регистрация: 20.03.2018
Сообщений: 9
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
..а что вообще должна делать-то программа?
сгенерированый сишным компилем ASM не будет работать. Его надо править.
посмотрите по ссылке https://drive.google.com/drive/folde...Xi?usp=sharing все исходные коды, в том числе CPP исх. код, из которого MSVS C++ сгенерировал АСМ код. А почему сгенерированный MSVS C++ код нерабочий? Если так, то всю компанию микрософт надо уволить. Ведь любой СИ компилятор транслирует через ассемблер ( а как же иначе?) - ведь надо в машинные команды все перевести. При проходе СИ в дизассемблере отладчика MSVS 2017 - сгенерированный асм код совпадает с тем, что видно в окне "к дизассемдированному коду". Если в сгенерированном асм коде есть ошибки, то, пожалуйста, укажите мне на них. АСМ код вы видите по ссылке в облаке. Я там кое что изменил сам - в частности, EXTRN написал так EXTRN C (func_name):FAR - но это не помогло - все равно идет переход на адрес вне программы при call этих СИ функций. Что касается самих команд ассемблера - (помимо вызовов СИ функций) - то там ошибок в логике программы нет. В отладчике OLLYDBG видно, что все команды main выполняются правильно и адекватно.
Vasya_Pupking вне форума Ответить с цитированием
Старый 20.03.2018, 14:08   #8
Vasya_Pupking
Новичок
Джуниор
 
Регистрация: 20.03.2018
Сообщений: 9
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Не заниматься ерундой,
мне не нравится тон ваших ответов. Я пытаюсь понять, где майкрософт генерирует асм код, неадекватный СИ коду. В ассемблере я немного разбираюсь. Если вы считаете, что вижуал СИ сгенерировал ошибочный асм код - то , пожалуйста, вы ( как профессионал) покажите мне ошибки в сгенерированном асм коде. И не надо грубить.
Vasya_Pupking вне форума Ответить с цитированием
Старый 20.03.2018, 14:13   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Как мне нравятся идиоты, которые возомнили из себе невесть что. Я вам еще раз повторю: компилятор сгенерировал все правильно, это вы не учли кучу параметров и неправильно все это собрали.
p51x вне форума Ответить с цитированием
Старый 20.03.2018, 14:17   #10
Vasya_Pupking
Новичок
Джуниор
 
Регистрация: 20.03.2018
Сообщений: 9
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Как мне нравятся идиоты, которые возомнили из себе невесть что. Я вам еще раз повторю: компилятор сгенерировал все правильно, это вы не учли кучу параметров и неправильно все это собрали.
.. да. вы видимо правы... так я сюда пришел. чтобы вы помогли мне разобраться, какие конкретно параметры я не учел при компиляции и линковке ( учтите - ни асм компилятор (ml.exe) ни линкер не выдали ни одной ошибки (!) ) - впрочем, если вы не хотите мне в этом помочь. то не надо - другие помогут. Но грубить и оскорблять-то зачем? Вы что - так самоутверждаетесь? Меня трудно обидеть.. я философски отношусь к таким , как вы.
Vasya_Pupking вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ARC GNU 1.1.0 Eclipse не компилирует exe файл victor5133 Общие вопросы C/C++ 3 22.07.2014 19:45
Параметр /section в link.exe из masm32 DinoAsm Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 12.09.2011 20:33
Возможен ли отлов ошибок "чужих" программ без скана экрана на предмет окон-ошибок? Человек_Борща Общие вопросы Delphi 4 21.04.2011 00:18
masm32 v9. не линкует программу Alcash Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 23.06.2008 09:57
Каким образом Delphi компилирует EXE? Jupiter Общие вопросы Delphi 4 26.03.2008 16:52