Здравствуйте подскажите пож-та, можно ли в масм сделать такой финт ушами .data var1 DQ offset label1 .code .... ; кодес label1: еще кодес ... пока получаю ошибку error A2006:undefined symbol : label1
а если серьезно? код - метафора вопрос стоит так - как в масме (и можно ли) с дата сегмента получить адрес метки в некой процедуре в кодосегменте
alex_dz, чтобы "с дата сегмента получить адрес метки в некой процедуре в кодосегменте" нужно метку в процедуре объявить, как глобальную, то есть после имени метки поставить два двоеточия «::» Код (ASM): . . . invoke CreateWindowEx @@: invoke GetMessage,&msg,0,0,0 cmp msg.wParam,VK_ESCAPE ;user press 'Esc'? je wmDESTROY; <-- invoke DispatchMessage,&msg jmp @b WinMain endp WndProc proc hWnd:QWORD,Msg:QWORD,wParam:QWORD,lParam:QWORD cmp edx, WM_DESTROY jz wmDESTROY cmp edx, WM_PAINT jz wmPAINT cmp edx, WM_CREATE jz wmCREATE leave jmp DefWindowProc ; --------------------------------------------------------------------------- wmDESTROY:: invoke SelectObject,hBackDC,hOldBmp;<--- mov hGDITmp,rax invoke DeleteObject,bufBMP . . .
то дальше особо некуда. ;.... B_ Equ Byte ptr .data _UpCode Proc Mov [CodeModify],0C3h ; RetN без одного из этих будет ;ошибка CodeModify Equ B_[$] Mov Cs,Ax ; в .data нельзя метки xxxx: в Masm, не утверждаю в Fasm ;~можно _UpCode EndP .code _TEXT_ ;.... Start: ;.... Mov B_[_UpCode],0C3h ; RetN без одного из этих будет ;ошибка Call _UpCode ; !!! ;.... end Start ; конец кода
Позвольте еще один вопрос, пока не могу найти решение если кратко - есть потребность создать .exe но с експортом... если делаю таким образом - \masm64\bin64\polink.exe /SUBSYSTEM:WINDOWS /MACHINE:X64 /ENTRY:START /LARGEADDRESSAWARE %1.obj %1.res /DEF:%1.def то получаю длл-ку (не то) а если так \masm64\bin64\polink.exe /SUBSYSTEM:WINDOWS /MACHINE:X64 /ENTRY:START /LARGEADDRESSAWARE %1.obj %1.res /DEF:%1.def /OUT:%1.exe то уже создает .exe но! она не запускается, ошибка --------------------------- Total Commander --------------------------- Access denied on file c:\Dev\test.exe! "test.exe is not a valid Win32 application." --------------------------- OK --------------------------- Поисследовав собранную екзешку вижу, что линкер одновременно поставил два флага- Если убрать руками 2ой флаг - File is a DLL, тогда файл нормально запускается Вот вопрос как указать линкеру чтоб нормально создавал екзе без таких кренделей