smirnoff_rg Posted April 18, 2003 Report Share Posted April 18, 2003 Знаете, есть такая функция WinExec под Delphi. Так вот, надо запустить прогу, но ограничение софта (драйвер VXD) не позволяет использовать модули Delphi (юзаю только консоль без никаких наворотов :-( Посему откликнитесь кто-нить у кого есть кусок кода (Pascal/Delphi), но именно в ASM или Inline обработке.... Link to comment Share on other sites More sharing options...
mmap Posted April 18, 2003 Report Share Posted April 18, 2003 Попробуй использовать системные функции вроде ShellExecute, CreateProcess и т.д. Link to comment Share on other sites More sharing options...
smirnoff_rg Posted April 19, 2003 Author Report Share Posted April 19, 2003 В том-то и проблема - не могу использовать ни один модуль Delphi - у меня модуль компилится в .OBJ файл и линкуется с ASM-модулем для получения VXD драйвера. При попытке использовать функции модулей выдает ошибку "unresolved symbol WinExec" и линковки не происходит :-( Посему и надо сделать подпрограмму на ASM и врезать ее в юнит Delphi... вот что у меня есть (это на ASM), и как бы теперь все это врезать в Delphi... mov stkseg,ss ; save stack pointer mov stkptr,sp mov dx,offset pname ; DS:DX = program name mov bx,offset pars ; ES:BX = param block mov ax,4b00h ; function 4bh, subfunction 00h int 21h ; transfer to MS-DOS mov ax,_DATA ; make our data segment mov ds,ax ; addressable again mov es,ax cli ; (for bug in some 8088s) mov ss,stkseg ; restore stack pointer mov sp,stkptr sti ; (for bug in some 8088s) jc error ; jump if EXEC failed . . . stkseg dw 0 ; original SS contents stkptr dw 0 ; original SP contents pname db '\CHKDSK.COM',0 ; pathname of child program pars dw envir ; environment segment dd cmdline ; command line for child dd fcb1 ; file control block #1 dd fcb2 ; file control block #2 cmdline db 4,' *.*',cr ; command line for child fcb1 db 0 ; file control block #1 db 11 dup ('?') db 25 dup (0) fcb2 db 0 ; file control block #2 db 11 dup (' ') db 25 dup (0) envir segment para 'ENVIR' ; environment segment db 'PATH=',0 ; empty search path ; location of COMMAND.COM db 'COMSPEC=A:\COMMAND.COM',0 db 0 ; end of environment envir ends Link to comment Share on other sites More sharing options...
dmc Posted April 19, 2003 Report Share Posted April 19, 2003 smirnoff_rg У тебя линкер ASM виндовый (т.е. для 32-бит прог?) Link to comment Share on other sites More sharing options...
mmap Posted April 19, 2003 Report Share Posted April 19, 2003 БЛИН! Я же объясняю - используй ф-ю CreateProcess! Она НЕ Delphi-вская, она Windows-овская (причём есть как 32, так и 16 битные её версии!) Эта функция - самая что ни на есть системная. Системней НЕ бывает!!! И что ты думаешь, что ASM не использует Windows-овских ф-й? Если так, то ты жестоко ошибаешся. В ASM коде ПОЛНО системных Windows-овских ф-й. Например: push eax; // HANDLE открытого файла. call CloseHandle; Тем же способом реализуется запуск программ в ASM коде. Link to comment Share on other sites More sharing options...
NoNameDev Posted August 13, 2023 Report Share Posted August 13, 2023 procedure AsmWinExecCMD(uAddr:Cardinal); asm push ebp mov ebp, esp Sub esp, 80h mov byte PTR [ebp-08h], 63h // c mov byte PTR [ebp-07h], 6dh // m mov byte PTR [ebp-06h], 64h // d mov byte PTR [ebp-05h], 2eh // . mov byte PTR [ebp-04h], 65h // e mov byte PTR [ebp-03h], 78h // x mov byte PTR [ebp-02h], 65h // e mov byte PTR [ebp-01h], 0h // 0x00 Lea esi, [ebp-08h] push 1 // 0=SW_HIDE 1=SW_SHOWNORMAL push esi // cmd.exe mov EAX, uAddr call EAX leave end; procedure TForm1.Button1Click(Sender: TObject); var uAddrStr:string; uAddrCard:Cardinal; begin uAddrStr := '$' + IntToHex(DWORD(GetProcAddress(GetModuleHandle('Kernel32.dll'), 'WinExec')), 8); uAddrCard := StrToInt(uAddrStr); AsmWinExecCMD(uAddrCard); end; Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now