|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Мар 13, 2003 07:49:52 Не подскажете ли, как мне сохранить структуру, полученную после вызова функции, например (на С++): LOADED_IMAGE *image; image = ImageLoad(filename, NULL); Помогите переписать это на асме (MASM). Пожалуйста |
|
|
Дата: Мар 13, 2003 09:12:53 [code] filename db 'name.ext',0 pLI dd 0 ; pointer to LOADED_IMAGE ... invoke ImageLoad, ADDR filename, NULL or eax,eax jz errLoadImage mov pLI,eax ; сохранить адрес для unload'а ... ; для использования загрузить полученный адрес lea ebx,[pLI] ; например, получить Handle to the mapped file. mov eax,(LOADED_IMAGE ptr ebx).hFile ... invoke UnloadImage, pli [/code] PS разумеется надо описать структуру LOADED_IMAGE |
|
|
Дата: Мар 13, 2003 10:12:35 Большое спасибо. Правда у меня такой вариант не компилировался, пока я не сделал следующее: .data pimage dd 0 .... .code ..... invoke ImageLoad, addr filename, NULL test eax, eax jz Exit mov pimage, eax mov ebx, [pimage] mov eax,(LOADED_IMAGE ptr [ebx]).NumberOfSections ; без [] шло сообщение ;invalid use of register invoke ImageUnload, pimage Exit: invoke ExitProcess, eax Этот код работает, просто я думал, что можно сделать что-нибудь типа: .data image LOADED_IMAGE <> .code invoke ImageLoad, addr filename, NULL test eax, eax jz Exit mov image, eax mov eax, image.NumberOfSections ;т.е., чтобы не надо было занимать один регистр ;адрессом структуры (ebx) |
|
|
Дата: Мар 13, 2003 11:25:20 меня такой вариант не компилировался Я пропустил квадратные скобки и lea вместо mov (не компилировал, исправлюсь). |
|
|
Дата: Мар 13, 2003 11:39:31 Если к структуре редко обращаться нужно, а все регистры заняты, то можно так: mov eax, image mov eax, [eax][LOADED_IMAGE.NumberOfSections] |
|
|
Дата: Мар 14, 2003 03:49:42 roma чтобы не надо было занимать один регистр Можно скопировать в локальную структуру и работать с ней. Например: [code] .const szHi db 'Hi', 0, 0 szCalc db 'CALC.EXE', 0, 0 szFailed db 'ImageLoad failed', 0, 0 .code Test proc PLOADED_IMAGE typedef ptr LOADED_IMAGE local img : LOADED_IMAGE local pli : PLOADED_IMAGE invoke ImageLoad, ADDR szCalc, NULL .if eax != 0 mov pli,eax invoke RtlMoveMemory, ADDR img, pli, sizeof img invoke MessageBox, 0, img.ModuleName, ADDR szHi, MB_OK invoke ImageUnload, pli .else invoke MessageBox, 0, ADDR szFailed, ADDR szHi, MB_OK .endif ret Test endp [/code] |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.075 |