Другие языки программирования и технологии
Вызов API-функции из ассемблерного кода.
хочу, скажем программно потушить монитор. вот листинг extrn SendMessage:PROC prg segment start: assume cs:prg,ds:prg,es:prg,ss:prg org 100h push 2 push 0F170h push 0112h push 0FFFFh call SendMessage mov ah,4ch int 21h prg ends end start программа, естесственно, не работает.. вопрос - почему и как надо? напомню, что монитор тушится SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, LPARAM(2)) все циферки в моей неудавшейся проге - из дефайнов соответствующих констант... буду очень благодарен
Какой ORG 100h под Win32??? Какой такой int 21h???
Ты бы хоть примеры асмовых прог под Вынь сначала в инете посмотрел.
Вначале нужно
.386
model flat, stdcall
.code
В конце надо ExitProcess вызвать.. .
ЗЫ: ДОСовским прогам WinApi недоступен, если что.
Ты бы хоть примеры асмовых прог под Вынь сначала в инете посмотрел.
Вначале нужно
.386
model flat, stdcall
.code
В конце надо ExitProcess вызвать.. .
ЗЫ: ДОСовским прогам WinApi недоступен, если что.
Sample code
.386
.model flat, stdcall
option casemap :none ; case sensitive
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\advapi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\advapi32.lib
.data
SubKey db "Software\Betrayed programming\Registry\",0
szBetrayed db "Betrayed",0
szCaption db "Reg Adder",0
szNoRun db "It seems you have never run this program before!",13,10
db "I will now add a item to the registry since you have ran this program",0
szHasRun db "Thank you for running this program more then once.",0
szRan db "Ran",0
.data?
hKey dd ?
hValue dd ?
szBuffer db 4 dup (?)
.code
start:
invoke RegOpenKeyEx,HKEY_LOCAL_MACHINE,ADDR SubKey,NULL,KEY_QUERY_VALUE,ADDR hKey ;open our key
.if! eax ;if it is there we more then likley wrote it
invoke RegQueryInfoKey, hKey,0,0,0,0,0,0,0,0,ADDR hValue,0,0 ;get the size of the entry
invoke RegQueryValueEx, hKey, ADDR szBetrayed,0,0,ADDR szBuffer,ADDR hValue ;get the value and keep it in the buffer
invoke lstrcmp,ADDR szBuffer,ADDR szRan ;compare it our ran string
.if! eax ;if they are the same it means the user has not modified it
invoke MessageBox,NULL,ADDR szHasRun,ADDR szCaption,MB_OK+MB_ICONINFORMATION ;alert them
.endif
.else
invoke MessageBox,NULL,ADDR szNoRun,ADDR szCaption,MB_OK+MB_ICONINFORMATION ;Alert the fact we have never been ran on this machine
invoke RegCreateKey,HKEY_LOCAL_MACHINE, ADDR SubKey,ADDR hKey ;create the key
.if! eax ;make sure it does not fail
invoke RegSetValueEx,hKey,ADDR szBetrayed,0,REG_SZ,ADDR szRan,4 ;set the szRan string in the registry
.endif
.endif
invoke RegCloseKey, hKey ;close the registry key
invoke ExitProcess,NULL
ret
end start
.386
.model flat, stdcall
option casemap :none ; case sensitive
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\advapi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\advapi32.lib
.data
SubKey db "Software\Betrayed programming\Registry\",0
szBetrayed db "Betrayed",0
szCaption db "Reg Adder",0
szNoRun db "It seems you have never run this program before!",13,10
db "I will now add a item to the registry since you have ran this program",0
szHasRun db "Thank you for running this program more then once.",0
szRan db "Ran",0
.data?
hKey dd ?
hValue dd ?
szBuffer db 4 dup (?)
.code
start:
invoke RegOpenKeyEx,HKEY_LOCAL_MACHINE,ADDR SubKey,NULL,KEY_QUERY_VALUE,ADDR hKey ;open our key
.if! eax ;if it is there we more then likley wrote it
invoke RegQueryInfoKey, hKey,0,0,0,0,0,0,0,0,ADDR hValue,0,0 ;get the size of the entry
invoke RegQueryValueEx, hKey, ADDR szBetrayed,0,0,ADDR szBuffer,ADDR hValue ;get the value and keep it in the buffer
invoke lstrcmp,ADDR szBuffer,ADDR szRan ;compare it our ran string
.if! eax ;if they are the same it means the user has not modified it
invoke MessageBox,NULL,ADDR szHasRun,ADDR szCaption,MB_OK+MB_ICONINFORMATION ;alert them
.endif
.else
invoke MessageBox,NULL,ADDR szNoRun,ADDR szCaption,MB_OK+MB_ICONINFORMATION ;Alert the fact we have never been ran on this machine
invoke RegCreateKey,HKEY_LOCAL_MACHINE, ADDR SubKey,ADDR hKey ;create the key
.if! eax ;make sure it does not fail
invoke RegSetValueEx,hKey,ADDR szBetrayed,0,REG_SZ,ADDR szRan,4 ;set the szRan string in the registry
.endif
.endif
invoke RegCloseKey, hKey ;close the registry key
invoke ExitProcess,NULL
ret
end start
Похожие вопросы
- Приведите пожалуйста пример программы на ассемблере, использующая API функцию GlobalMemoryStatus. Заранее спасибо.
- Fasm, вызов WinAPI функций
- Объясните, пожалуйста, ассемблерный код
- Ассемблерная вставка в С .Странный код. Можете расшифровать?
- Запуск ассемблерных программ на "чистом" компьютере.
- Помогите, пожалуйста, написать программу на делфи с ассемблерными вставками.
- Есть ли фактические параметры в рекурсивной функции? В ней же нет вызова функции?
- Вызов функции в Си
- Как узнать путь к исполняемой программе с помощью функций API ?
- C++ Win32 API Какой функцией получить открытые в текущий момент окна?
да лопух.. сам уже понял.
и асмовые проги в нете посмотрел я..
у меня курсач - вирус. есть остов вируса под DOS, вот и хотел в качестве симптомов вызывать функции API. а оно о как, не прокатит... спасибо за ответ.