smirnoff_rg Опубликовано 18 апреля, 2003 Жалоба Поделиться Опубликовано 18 апреля, 2003 Знаете, есть такая функция WinExec под Delphi. Так вот, надо запустить прогу, но ограничение софта (драйвер VXD) не позволяет использовать модули Delphi (юзаю только консоль без никаких наворотов :-( Посему откликнитесь кто-нить у кого есть кусок кода (Pascal/Delphi), но именно в ASM или Inline обработке.... Ссылка на комментарий Поделиться на другие сайты Поделиться
mmap Опубликовано 18 апреля, 2003 Жалоба Поделиться Опубликовано 18 апреля, 2003 Попробуй использовать системные функции вроде ShellExecute, CreateProcess и т.д. Ссылка на комментарий Поделиться на другие сайты Поделиться
smirnoff_rg Опубликовано 19 апреля, 2003 Автор Жалоба Поделиться Опубликовано 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 Ссылка на комментарий Поделиться на другие сайты Поделиться
dmc Опубликовано 19 апреля, 2003 Жалоба Поделиться Опубликовано 19 апреля, 2003 smirnoff_rg У тебя линкер ASM виндовый (т.е. для 32-бит прог?) Ссылка на комментарий Поделиться на другие сайты Поделиться
mmap Опубликовано 19 апреля, 2003 Жалоба Поделиться Опубликовано 19 апреля, 2003 БЛИН! Я же объясняю - используй ф-ю CreateProcess! Она НЕ Delphi-вская, она Windows-овская (причём есть как 32, так и 16 битные её версии!) Эта функция - самая что ни на есть системная. Системней НЕ бывает!!! И что ты думаешь, что ASM не использует Windows-овских ф-й? Если так, то ты жестоко ошибаешся. В ASM коде ПОЛНО системных Windows-овских ф-й. Например: push eax; // HANDLE открытого файла. call CloseHandle; Тем же способом реализуется запуск программ в ASM коде. Ссылка на комментарий Поделиться на другие сайты Поделиться
NoNameDev Опубликовано 13 августа, 2023 Жалоба Поделиться Опубликовано 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; Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти