![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,828
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#12 |
Новичок
Джуниор
Регистрация: 20.03.2018
Сообщений: 9
|
![]()
Уважаемый господин "профессионал" - я сам нашел ошибку. Никакой "кучи" параметров менять (как выяснилось) не надо и в линковке - тоже. ЕДИНСТВЕННАЯ ошибка (которую создал именно вижуал си при генерации асм кода) это то, что вызов всех СИ функций был оформлен так: "call dword ptr printf" - что вынуждало адресовать вызов по DS (что в корне неверно). После замены всех вызовов так: "call printf" - и без изменения (!) чего бы то ни было в *.bat файле компиляции и линка - получаемый EXE пошел ОК. (.....оказывается тут и "профессионалы" ничего не знают....) . Всем спасибо - тема закрыта.
|
![]() |
![]() |
![]() |
#13 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,828
|
![]()
Идиот так и не понял о чем ему говорили...
|
![]() |
![]() |
![]() |
#14 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,370
|
![]() |
![]() |
![]() |
![]() |
#15 |
Новичок
Джуниор
Регистрация: 20.03.2018
Сообщений: 9
|
![]()
нет... вижуал СИ сгенерировал вызовы библиотечных функций вот так: "call DWORD PTR printf" - такой вызов предусматаривает (по умолчанию) использование сегментного регистра DS, а нужно вызовы делать по CS - и это баг микрософта. В Olly DBG такие вызовы именно сегментировались по DS (что неверно). Я все такие вызовы заменил на "call printf" - (не меняя вообще больше ничего в программе и бат файле компиляции и линка) - в результате вызовы стали делаться по CS и программа пошла ОК без единой ошибки и выполнила весь свой алгоритм. Вы тоже учтите этот баг микрософта.
|
![]() |
![]() |
![]() |
#16 | |
Новичок
Джуниор
Регистрация: 20.03.2018
Сообщений: 9
|
![]() Цитата:
__stdcall — паскалевский вызов принятый по умолчанию для экспорта функций API Win32, стек освобождается вызванной функцией при возврате и в связи с этим не позволяет передавать переменное число параметров. Зато можно вызывать например из Delphi. __cdecl — СИшный способ вызова, стек освобождается вызывающим кодом, позволяет передавать переменное число параметров. В сгенерированном коде ЭТОЙ ошибки не было! Правильно применялся cdecl вызов. Параметры передавались правильно и стек очищался вызывающей прг. Ошибка была в другом - в чем - ваш "профессиональный мозг" не смог догадаться. Ошибка (именно микрософта) в том, что он имена функций спутал с именами переменных и адресовал их по DS ( а нужно было по CS) - вы до этого и не могли догадаться....видимо ваш профессионализм уже зашкаливает и мозги начинают пухнуть ...ЛОЛ!. |
|
![]() |
![]() |
![]() |
#17 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,370
|
![]() |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |