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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2018, 14:26   #11
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,694
По умолчанию

Цитата:
Сообщение от Vasya_Pupking Посмотреть сообщение
какие конкретно параметры я не учел при компиляции и линковке
Цитата:
Сообщение от p51x Посмотреть сообщение
Вы не указали соглашения о вызовах, вы неправильно определили указатели и вызовы функций (нафига вы это делали раз у вас есть инклуды и либы с масм32 я так и не понял), и т.д.
Цитата:
Сообщение от Vasya_Pupking Посмотреть сообщение
чтите - ни асм компилятор (ml.exe) ни линкер не выдали ни одной ошибки (!) )
А почему он должен? Ему сказали вызывать эту функцию оттуда как стдколл - он и вызывает, а то что в действительности надо cdecl, да еще и из библиотеки...
p51x на форуме Ответить с цитированием
Старый 20.03.2018, 15:55   #12
Vasya_Pupking
Новичок
Джуниор
 
Регистрация: 20.03.2018
Сообщений: 9
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Как мне нравятся идиоты, которые возомнили из себе невесть что. Я вам еще раз повторю: компилятор сгенерировал все правильно, это вы не учли кучу параметров и неправильно все это собрали.
Уважаемый господин "профессионал" - я сам нашел ошибку. Никакой "кучи" параметров менять (как выяснилось) не надо и в линковке - тоже. ЕДИНСТВЕННАЯ ошибка (которую создал именно вижуал си при генерации асм кода) это то, что вызов всех СИ функций был оформлен так: "call dword ptr printf" - что вынуждало адресовать вызов по DS (что в корне неверно). После замены всех вызовов так: "call printf" - и без изменения (!) чего бы то ни было в *.bat файле компиляции и линка - получаемый EXE пошел ОК. (.....оказывается тут и "профессионалы" ничего не знают....) . Всем спасибо - тема закрыта.
Vasya_Pupking вне форума Ответить с цитированием
Старый 20.03.2018, 16:01   #13
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,694
По умолчанию

Идиот так и не понял о чем ему говорили...
p51x на форуме Ответить с цитированием
Старый 20.03.2018, 16:34   #14
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от Vasya_Pupking Посмотреть сообщение
где майкрософт генерирует асм код, неадекватный СИ коду
Нигде.
waleri вне форума Ответить с цитированием
Старый 20.03.2018, 16:57   #15
Vasya_Pupking
Новичок
Джуниор
 
Регистрация: 20.03.2018
Сообщений: 9
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Нигде.
нет... вижуал СИ сгенерировал вызовы библиотечных функций вот так: "call DWORD PTR printf" - такой вызов предусматаривает (по умолчанию) использование сегментного регистра DS, а нужно вызовы делать по CS - и это баг микрософта. В Olly DBG такие вызовы именно сегментировались по DS (что неверно). Я все такие вызовы заменил на "call printf" - (не меняя вообще больше ничего в программе и бат файле компиляции и линка) - в результате вызовы стали делаться по CS и программа пошла ОК без единой ошибки и выполнила весь свой алгоритм. Вы тоже учтите этот баг микрософта.
Vasya_Pupking вне форума Ответить с цитированием
Старый 20.03.2018, 17:15   #16
Vasya_Pupking
Новичок
Джуниор
 
Регистрация: 20.03.2018
Сообщений: 9
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
А почему он должен? Ему сказали вызывать эту функцию оттуда как стдколл - он и вызывает, а то что в действительности надо cdecl, да еще и из библиотеки...
вы не профессионал - вы "профессионал" -
__stdcall — паскалевский вызов принятый по умолчанию для экспорта функций API Win32,
стек освобождается вызванной функцией при возврате и в связи с этим не позволяет передавать переменное число параметров.
Зато можно вызывать например из Delphi.

__cdecl — СИшный способ вызова, стек освобождается вызывающим кодом, позволяет передавать переменное число параметров.
В сгенерированном коде ЭТОЙ ошибки не было! Правильно применялся cdecl вызов. Параметры передавались правильно и стек очищался вызывающей прг. Ошибка была в другом - в чем - ваш "профессиональный мозг" не смог догадаться. Ошибка (именно микрософта) в том, что он имена функций спутал с именами переменных и адресовал их по DS ( а нужно было по CS) - вы до этого и не могли догадаться....видимо ваш профессионализм уже зашкаливает и мозги начинают пухнуть ...ЛОЛ!.
Vasya_Pupking вне форума Ответить с цитированием
Старый 20.03.2018, 17:41   #17
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от Vasya_Pupking Посмотреть сообщение
"call DWORD PTR printf"
А вы поменяйте настройки проекта в С, пусть использует статическую библиотеки, вместо DLL...
Когда вы вызываете функции из DLL библиотеки на самом дели все функции объявлены так:
void(*printf)(...)
Чуствуете разницу?
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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