Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: bomzzz
Дата сообщения: 20.01.2013 22:14
ItsJustMe

http://rghost.ru/43192333

http://www.cyberforum.ru/assembler/thread765871.html
Автор: ItsJustMe
Дата сообщения: 21.01.2013 00:28
Итак....
http://rghost.ru/43194834

1. Никогда раньше не работал с голым asm'ом - только в составе VS. Поэтому долго втыкал, где взять все эти includes. В конце концов скачал MASM32 v11.
2. Сделал по аналогии с твоей DLL точно такую же, но свою - из тех заготовок, что MASM предложил Отличия от твоей минималистской версии есть, но лишь косметические. Если убрать пару строчек - то будет один в один соответствовать.
3. У меня все заработало, как и ожидалось. testdll.dll создалась, ta.exe (test application) создалась, ta использовала самым утилитарным образом tstproc и вывела результат. Результат совпал с посчитанным на бумажке То есть проверка работы tstproc показала, что tstproc работает правильно.

4. Теперь все же отличия.

a. Вместо кучи includes только один, вставленный самим MASM. Других includes он не просил, успешно работал с этим одним.
b. Мне было странно видеть в DEF имя функции в кавычках да еще и с обозначением размера стека. Да еще и mangled. MASM, as I suspected, doesn't mangle proc names. So I used the proc name as it was, "tstproc".

PS: Когда я все это написал, до меня дошло, что тебе, вроде как требовалось вызвать tstproc из C application. Так что файл T1 перезалит, добавлено ConsoleApplication. ConsoleApplication также работает, как и asm версия - т.е. складывает таки чиселки
Автор: bomzzz
Дата сообщения: 21.01.2013 00:40
не знаю зачем так сделано - в масме внутри есть папка с примерами, этот пример оттуда, только там примеры все фиговые перегружены лишним, я просто его упростил до состояние что ничего не выкинешь. если в деф файле заменить _testproc@8, на просто testproc все тоже будет работать. даже поудобнее потому что если потом дллку загружать с помощью loadlibruary и getprocaddres не надо это дебильное имя использовать _testproc@8


Цитата:
Вместо кучи includes только один, вставленный самим MASM.

это не принципиально, тоже самое там написано в этом инклуде, им любят пользоваться те кто в масм из си приходят

может в семерке какая то защита включена, или может там юзер с правами урезанными. в чем же дело может быть. другие программы там же работают. может дллку надо как тов системе регистрировать?
Автор: ItsJustMe
Дата сообщения: 21.01.2013 00:58
См. update предыдущего поста
Подозреваю, что все дело в mangled name. Так как MASM никаких операций над именами экспортируемых функций не производит, то скорее всего, в DLL, сделанной из testdll.asm попросту отсутствует _tstproc@8. В тексте самой DLL ее нет, там есть просто tstproc.
Впрочем, специально я этот вопрос не изучал, лишь предположил, что имена используются "as is", без изменения. На этом предположении построены ta.exe и ConsoleApplication. Так как оба работают, делаю вывод, что предположение было верным.
Автор: bomzzz
Дата сообщения: 21.01.2013 01:00
ну я рад что ошибка не у меня. но как понять почему на семерке не работало. к тому же я в той семерке туплю куда тыкать
Автор: ItsJustMe
Дата сообщения: 21.01.2013 01:04
Опять см. update of the previous post
Автор: bomzzz
Дата сообщения: 21.01.2013 01:08
да там вроде говорили что не работало и когда через lib при компиляции дллка связывалась и когда вызвалось доалибруари тоже. и потом если имя функции неправильно указать там ошибка не номер пять получается
Автор: ItsJustMe
Дата сообщения: 21.01.2013 01:34
Было проведено небольшое исследование. Да, в твоей dll экспортируемая функция действительно имеет имя _tstproc@8. (Правда, я не понимаю, как MASM понял, что _tstproc@8 это tstproc. Не занимался же он лексическим анализом... Впрочем, это не суть важно.) Сейчас использовал с ConsoleApplication твою dll и функцию с именем _tstproc@8. Работает, аднака

Да, и вот еще что. Если вызвать GetProcAddress с имемем функции, отсутствующей в DLL, она вернет nullptr. Если это дело не проверить и использовать nullptr как адрес функции, будет 100% 0x00000005 (Access denied).
Автор: AZJIO
Дата сообщения: 21.01.2013 02:53
Всю ночь качать "Microsoft Visual Studio Express 2012", чтобы в итоге выяснить что ему нужен фреймворк 4.5, который не ставиться под WinXP.
Автор: bomzzz
Дата сообщения: 21.01.2013 04:58
я когда то ставил самую простую причем. чтоб с ней разобраться надо кучу времени убить. есть Си компиляторы попроще
Автор: akaGM
Дата сообщения: 21.01.2013 11:43

Цитата:
понял, что _tstproc@8 это tstproc
потому что это дефолтное соглашение stdcall для венды...
а в межязыковых игрищах надо самому этим управлять...
Автор: ne_viens
Дата сообщения: 21.01.2013 13:44
>bomzzzА на твоём компе в том конце откомпилированные dll+exe работают?

Вспомнил, что некоторые антивири подозрительно относятся к прогам компилированным на MASMe. Не тот ли случай?
Автор: bomzzz
Дата сообщения: 21.01.2013 14:05
просил отключить антивирус, аваст по моему стоял. не помогло. ниче они не ругаются на масм, Си компилятор хорошо оптимизирован программы совсем чуть чуть отличаются

у менявсе работает и то что ItsJustMe выложил тоже

Добавлено:



Добавлено:
и ошибка возникает ни когда лоадлибруари - файл не заблокирован, а когда гетпрокадрес
Автор: ne_viens
Дата сообщения: 21.01.2013 14:34
Что GetLastError() сразу после GetProcAddress() выдаёт?
Автор: bomzzz
Дата сообщения: 21.01.2013 15:02
5-ку

http://msdn.microsoft.com/en-us/library/ms681382.aspx

Цитата:
ERROR_ACCESS_DENIED
5 (0x5)
Access is denied.

Автор: ne_viens
Дата сообщения: 21.01.2013 16:37
Если посмотреть код GetProcAddress(), то видно, что такую ошибку эта функция вообще не возвращает, только ERROR_INVALID_PARAMETER, ERROR_MOD_NOT_FOUND, ERROR_PROC_NOT_FOUND и ERROR_INVALID_ORDINAL.
Или там хук накинут и ошибку код хука возваращает, или ошибка всё-таки дальше по ходу появляется.
Автор: bomzzz
Дата сообщения: 21.01.2013 18:01
ошибку система возвращает
Автор: kotlomoy
Дата сообщения: 21.01.2013 20:44
AZJIO

Цитата:
Всю ночь качать "Microsoft Visual Studio Express 2012", чтобы в итоге выяснить что ему нужен фреймворк 4.5, который не ставиться под WinXP.

2012-я студия не поддерживает Windows XP, это же в требованиях написано.
2010-я пойдет на WinXP только с третьим сервиспаком.
2008-я идет без проблем.

Я пользуюсь 2008-й под WinXP и 2010-й под Win7.

bomzzz

Цитата:
я когда то ставил самую простую причем. чтоб с ней разобраться надо кучу времени убить. есть Си компиляторы попроще

Не знаю, я в свое время начинал в студии без проблем. Можно сразу уже работать.
Со всеми настройками проектов уже потом по мере необходимости разбираешься. К тому же необходимость такая еще не скоро возникает.

А вот запустил я недавно Eclipse под виндой, вот там да - надо разбираться (: даже чтобы просто проект собрать
Автор: bomzzz
Дата сообщения: 21.01.2013 20:47
а потом программы сделанные этой студией будут требовать дллки черти какие причем разных версий. таким софтом стараюсь не пользоваться. одному только замену найти не смог ATI Tray Tool - так что просто им не пользуюсь
Автор: kotlomoy
Дата сообщения: 21.01.2013 20:56
bomzzz
Чтобы программы дллки не требовали, надо в конфигурации Release собирать, а не в Debug. Debug - это неоптимизированный код для отладки, такой только из студии есть смысл запускать.
Автор: bomzzz
Дата сообщения: 22.01.2013 00:36
жалко что это не все знают

Добавлено:
а не скажете на студии 10 переменные XMMWORD и YMMWORD можно описать? не уверен что правильная постановка вопроса

Добавлено:
дайте пожалуйста файлы
lib.exe
link.exe
ml.exe
msobj110.dll
mspdb110.dll
mspdbcore.dll
mspdbsrv.exe
msvcr110.dll
из самой последней студии 2012 самой последней версии
Автор: bomzzz
Дата сообщения: 22.01.2013 16:48
все кабинетные файлы перековырял и инсталяторы. нашел только ml64.exe. никто не знает где в en_visual_studio_professional_2012_x86_dvd_920779 вышеупомянутые файлы спрятались?
Автор: AZJIO
Дата сообщения: 22.01.2013 17:18
kotlomoy

Цитата:
2012-я студия не поддерживает Windows XP, это же в требованиях написано.
Что-то не вижу чтобы там в требованиях было написано, а раз про требования ничего не написано то подразумевается что должно работать на не закрытых проектах Windows. Ну да ладно, судя по фремворк 4.5 понятно, что должно быть где то написано, плохо что не навидном месте.

Скачал Eclipse, жаль что только англ. фейс, хотя и не страшно. Но не могу найти кнопку компиляции.

Кстати, пока освобождал место под установку VS нашёл примеры для "wxDev-Cpp", который как ни странно он воткнул в "C:\ProgramData\Dev-Cpp\examples\wxWidgets", а не в каталог инсталяции. Но судя по размеру компилируемых файлов (9 Мб) стало ясно что он как в Qt использует собственные классы, хотя неплохо было бы такую же коллекцию иметь с использованием стандартных элементов Windows.
Автор: bomzzz
Дата сообщения: 22.01.2013 17:39
AZJIO
она на хп вообще не ставится, или ставитс но не работает?

Добавлено:

Цитата:
@ECHO OFF
COLOR 9F
rem dir /b G:\
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /R "G:\" %%I IN (.) DO (
SET string=%%I
REM echo !string:~0,-1!*.cab
expand !string:~0,-1!*.cab -F:* c:\temp
)
pause

попробую все кабинеты распаковать в одну папку может найдутся
Автор: ItsJustMe
Дата сообщения: 22.01.2013 18:10
bomzzz
http://www.microsoft.com/en-us/download/details.aspx?id=30679
Автор: bomzzz
Дата сообщения: 22.01.2013 18:13
у меня такие есть для всех студий, насобирал когда ати трей тул был нужен. к драйвере интел нашел утановщик который ровно нужные библиотеки ставит и почти не гадит в систему

Добавлено:
уря все файлики нашлися
Автор: kotlomoy
Дата сообщения: 22.01.2013 21:13
bomzzz

Цитата:
а не скажете на студии 10 переменные XMMWORD и YMMWORD можно описать?

Ассемблером не пользуюсь, так что не по адресу вопрос.
Могу лишь отослать:
http://msdn.microsoft.com/en-us/library/cw0399sf%28v=vs.80%29.aspx
http://msdn.microsoft.com/en-us/library/ee404743%28v=vs.100%29.aspx

AZJIO

Цитата:
Что-то не вижу чтобы там в требованиях было написано

http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-for-windows-desktop#product-express-desktop-details

Цитата:
Но не могу найти кнопку компиляции.

Я сам не стал разбираться с этим, не могу помочь

Цитата:
он как в Qt использует собственные классы

http://ru.wikipedia.org/wiki/WxWidgets
Автор: bomzzz
Дата сообщения: 22.01.2013 21:25
6.4 версия ml.exe sse вообще не поддерживает. соответсвенно и xmmword не работает
8.0 версия уже поддерживает mmx sse и xmmword работает
11 версия из 12 студии (видимо начиная с 10 студии) уже поддерживает ymmword.
хоть это одно и тоже 128 битная переменная, лишь маркер позних версий.

на сайте микрософта выложена отдельно 8 версия. а я хотел вытащить более поздние из студии. вытащить вытащил да чета они не работают. возможно надо устанавливать а потом вытаскивать

Добавлено:
kotlomoy
а ты не можешь у себя эти файлики вытащить?
Автор: ItsJustMe
Дата сообщения: 22.01.2013 22:47
bomzzz
Я когда вытащил MASM32 v11 с http://www.masm32.com/masmdl.htm , выяснил, что в действительности там MASM 6.
А не проще тебе просто VS2012 поставить и юзать из нее только MASM? VS хоть и полненькая , но при размерах нынешних хардов это совсем не критично.
Автор: bomzzz
Дата сообщения: 22.01.2013 23:20
ради нее еще надо семерку ставить и фреймворк черти какой и весит она в распакованном виде больше 6 гигов и файлов там 26000. а масм32 50 мб занимает. причем там чепухи еще полно, какие то редакторы беспонтовые и программы дебильные.

скачал 10 студию вытащил из нее мл.екзе. все работает YMMWORD это 256 битная переменная, видимо для sse 4 или выше. link.exe и lib.exe не заработали. попроверял вроде все компилится старое, драйвер скомпилил - но тут еще недоработано в масме надо подкладывать дофига

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.