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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2014, 05:37   #1
Klient.by
 
Регистрация: 20.01.2014
Сообщений: 7
По умолчанию Настройки VS2010. Оконный проект на asm x64. Вызов API.

Вот такой код:
Код:
  1. option casemap:none ; Метки будут чувствительны к регистру
  2. extrn MessageBoxA: PROC ;
  3. extrn ExitProcess: PROC ;
  4. .DATA
  5. MsgBoxCaption db 'API MessageBoxA',0 ;
  6. MsgBoxText db 'API все-таки можно вызвать чисто на asme x64 в Visual Studio',0 ;
  7. .CODE
  8. WinMainCRTStartup PROC ; Линкер от Visual Studio отказывается работать если будет другое
  9. ; имя, например WinMain
  10. sub rsp, 28h ; резервируются место в стеке для первых четырех аргументов,
  11. ; передаваемых через регистры. +8 байт наверно выравнивание.
  12. xor r9d, r9d ; 0 = MB_OK
  13. lea r8, MsgBoxCaption ; LPCSTR lpCaption
  14. lea rdx, MsgBoxText ; LPCSTR lpText
  15. xor rcx, rcx ;NULL; hWnd = HWND_DESKTOP
  16. call MessageBoxA ; ml64.exe не имеет встроенного макроса invoke
  17. mov ecx, eax ; ExitCode ; Функция ExitProcess ожидает 32-битный параметр
  18. call ExitProcess
  19. ;add rsp, 28h ;Это нужно было-бы, если бы процессор сюда возвращался.
  20. WinMainCRTStartup ENDP
  21. END
Студия комипилит, и линкует без ошибок и предупреждений.
Если по аналогии попробовать вызвать какую ни будь другую API, например, вставить в соответствующих местах:
extrn GetModuleHandle: PROC ;
и
call GetModuleHandle ;
То линкер выдает ошибку:
1>TempAsm.obj : error LNK2019: ссылка на неразрешенный внешний символ GetModuleHandle в функции WinMainCRTStartup
1>I:\Worker\Projekt\Visual Studio 2100\TempAsm\x64\Debug\TempAsm.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
Она из другой Dll?
Все настройки в студии по умолчанию, только подключил Masm и добавил x64 конфигурацию.
Проект создавался > Win32 Visual C++ > Пустой проект.
Похоже, надо где-то что-то подключить?

Последний раз редактировалось Klient.by; 20.01.2014 в 18:02.
Klient.by вне форума Ответить с цитированием
Старый 20.01.2014, 14:15   #2
TELEPUZ
Пользователь
 
Регистрация: 20.01.2014
Сообщений: 37
По умолчанию

Да, похоже, что вы не подключили какие-то библиотеки в проект. В настройках студии, на сколько я помню нужно указывать путь к либам...
TELEPUZ вне форума Ответить с цитированием
Старый 20.01.2014, 14:17   #3
TELEPUZ
Пользователь
 
Регистрация: 20.01.2014
Сообщений: 37
По умолчанию

Во всяком случае копать надо в направлении подключения библиотек. это 100% - у меня помню такие же ошибки выскакивали, когда не указывал путь...
TELEPUZ вне форума Ответить с цитированием
Старый 20.01.2014, 15:27   #4
rlib
Форумчанин
 
Аватар для rlib
 
Регистрация: 22.05.2012
Сообщений: 352
По умолчанию

GetModuleHandleA для анси

GetModuleHandleW для уникода
rlib вне форума Ответить с цитированием
Старый 20.01.2014, 15:42   #5
Klient.by
 
Регистрация: 20.01.2014
Сообщений: 7
По умолчанию

GetModuleHandleA сработало!
1>Затраченное время: 00:00:12.03
========== Построение: успешно: 1, с ошибками: 0, без изменений: 0, пропущено: 0 ==========
Спасибо.
Интересно, а как остальные, буду пробовать.
Klient.by вне форума Ответить с цитированием
Старый 20.01.2014, 18:41   #6
Klient.by
 
Регистрация: 20.01.2014
Сообщений: 7
По умолчанию

Так, хорошо, как в «золотой рыбке» корыто я получил.
Значит теперь, если компилятор, почти без каких-либо действий с моей стороны, узнает имена API,
То нельзя ли что-нибудь сделать, чтоб он начал узнавать и типы данных Windows?
А то сейчас, вот на такую строку:
CommandLine LPSTR ?
Он ругается вот такими словами:
1>_MASM:
1> Assembling [Inputs]...
1>TempAsm.asm(15): error A2008: syntax error : LPSTR
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Bu ildCustomizations\masm.targets(49,5 ): error MSB3721: выход из команды "ml64.exe /c /nologo /Zi /Fo"x64\Debug\TempAsm.obj" /W3 /errorReportrompt /TaTempAsm.asm" с кодом "1".
Klient.by вне форума Ответить с цитированием
Старый 20.01.2014, 21:34   #7
rlib
Форумчанин
 
Аватар для rlib
 
Регистрация: 22.05.2012
Сообщений: 352
По умолчанию

Качни дефинишены:

http://win32assembly.programminghori...tutorials.html
rlib вне форума Ответить с цитированием
Старый 21.01.2014, 12:06   #8
Klient.by
 
Регистрация: 20.01.2014
Сообщений: 7
По умолчанию

Насколько я понял, мне нужен файл windows.inc?
А где и что надо прописать в студии, чтоб она его подхватила?
По ссылке лежит вот такой:
WINDOWS.INC for 32 bit MASM (Version 1.25a) 22 October 2001 (Iczelion)
Нашел еще вот такой:
WINDOWS.INC for 32 bit MASM (Version 1.4c RELEASE April 2008) (Project WINDOWS.INC at the Masm Forum)

Но они же все «for 32 bit»:
LPSTR TYPEDEF DWORD
Для x64 надо поменять на QWORD?
Klient.by вне форума Ответить с цитированием
Старый 21.01.2014, 12:35   #9
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

INC лучше брать с http://masm32.com/masmdl.htm или форума
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 21.01.2014, 18:56   #10
Klient.by
 
Регистрация: 20.01.2014
Сообщений: 7
По умолчанию

Ну, въехал что надо чтоб подхватила:
Положить в папку с проектом, а в исходник прописать include windows.inc.
Для x64 конфигурации его, получается надо просто полностью обнулить, и походу копировать туда только то, что понадобилось и подправлять где надо размерность.
Klient.by вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
изменить код asm x32 под asm x64 за вознаграждение Ecosasha Фриланс 2 28.11.2013 14:11
Delphi XE2 x64 asm написанная под x32 преобразование к x64 Ecosasha Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 26.11.2013 22:45
ASM в VS2010 Berlioz Помощь студентам 4 17.08.2012 11:41
Вызов C-шной printf из ASM-программы (tasm). Не работает. Зойберг Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 04.11.2011 09:25
Вызов метода в asm вставке. Mixasik Общие вопросы Delphi 3 20.02.2010 10:42