Поиск:

Ответ в темуСоздание новой темы Создание опроса
> <<Вызов API>> Help! Срочно!!!!! 
:(
    Опции темы
kostik_16
  Дата 22.11.2003, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 23.7.2003

Репутация: нет
Всего: 1



Проблема вот в чем заклячается:
Мне надо вызвать на асме API функцию, но для этого НЕ ИСПОЛЬЗОВАТЬ ДОПОЛНИТЕЛЬНЫЕ *.LIB И *.INC.


Одним словом, кто знает код вызова API на частом асмовском языке.

Поясняю:
Этот код мне надо вставить в проект Delphi, вот для чего я пишу не использовать различные доп функции например invoke и т.д., так как это Delphi не понимает!


ПОМОГИТЕ ПОЖАЙЛЕСКА КАК МОЖНО БЫСТРЕЕ, А ТО МНЕ СРОЧНО НАДО!!!





ВСЕМ ЗАРАНЕЕ БЛАГОДАРЕН!!!!
PM MAIL   Вверх
Chingachguk
Дата 23.11.2003, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Не очень понял.

Если ты в дельфи используешь какие-нибудь ф-ции из kernel32.dll, user32.dll и т.п., то ничего не мешает вызывать их и из асм-вставок. Т.е. если ты написал там что-то вроде uses kernel.tpu (я на дельфи не пишу, поэтому сказать не могу точно), то все функции из нее тебе должны быть доступны. Посмотри в хелпе, примерах и т.п.

На самом деле вызов тех или иных апи - ничего более, чем размещение в определенной секции импорта заголовка экзешника 1) имени нужной dll; 2) ф-ций из этой dll. При запуске винда сама поймет, что ты хочешь использовать и заменит эти символьные имена на адреса нужных функций. После этого приложение может вызывть эти ф-ции через jmp или call. Нажми F4 на экзешнике и увидишь.

Быввет так, что по каким-то причинам это сделать нельзя, т.е. нельзя писать в хидере экзешника в таблицу импорта имена функций и подключаемых dll. Это может быть по разным причинам. Например, вирусу может быть тяжело корректировать экзешник или обычный vb-код поступает так: само приложение минимально (может быть 10 килобайт) и оно экспортирует одну лишь апи - kernel32.dll, LoadLibaryA. Благодаря этой апи оно всегда требует подключения здоровенной vb'шной dll порядка 5-ти метров, которая уже внутри себя вызывает виндовые апи.

Всегда можно по имени dll и имени апи в ней вызвать эту апи из нее, даже без подключения этой dll в проект (экзешник). Для этого достаточно экспортировать всего пару апи:

Цитата

kern32            db      'kernel32.dll',0
ll                      db      'LoadLibraryA',0
llproc              dd ?

                call            GetModuleHandleA,offset kern32
                call            GetProcAddress,eax,offset ll
                mov          llproc,eax
; Далее call на этот адрес


Если уже совсем все плохо, то можно сделать call на абсолютный адрес, те рискуя потерять переносимость от одной версии винды к другой. Например, опытным путем ты выяснил, что точка входа в CreateFileA - 7F000000h. Во всех версиях винды call на этот адрес приведет к правильному вызову этой апи. Если же винда с другой версией - то все, амба.

В nt-моделях винды (типа xp вроде) можно юзать системный вызов Int 2Eh, вроде это то же самое. параметров я не скажу, но найти не проблема....


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
p0s0l
Дата 23.11.2003, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



kostik_16, если на Delphi - то, как сказал Chingachguk, подключаешь нужный юнит. А для вызова нужной функции запоминай на стеке параметры, а потом делай call FunctionName.
Пример:
Код
   push MB_ICONASTERISK
   call MessageBeep

Только не запутайся с порядком параметров: тот параметр, который в описании функции идет первым, должен сохраняться в стеке в последнюю очередь...


--------------------
С уважением, г-н Посол.
PM   Вверх
kostik_16
  Дата 23.11.2003, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 23.7.2003

Репутация: нет
Всего: 1



Код
Я это понимаю, что вы мне сказали, но вы не поняли меня!

Просто я прикрепляю свою процедурку к другому(левому) файлу!
Для этого мне и надо найти например kernel32.dll или user32.dll, а потом прочитать и вытянуть оттуда эту функцию!

У меня есть предложение найти это все дело в стеке, так как что-бы запустить прогу на начальном уравне уже используется вызов этих библиотек!

Вот пример, только я не могу с ним разобраться(не могу впихнуть в Delphi)! Если можете, то помогите мне с ним разобраться! Кстати, что-бы у вас не возникало вопросов, Я ПИШУ НЕ ВИРУС! ПРОГРАММА ДЛЯ ЗАЩИТЫ EXE!!!!!!!!!!

Код, находящийся ниже надо может упростить и оптимизировать под Delphi!

Всем заранее благодарен!!!!!!!!!!


Код
; . All code from here on IS the new section - variables are relative to
; where we are (ebp+whatever) NOT accessed normally
; . The code from here is predominantly YODA (with some tasm fixes and code moving)
; so look at his src for more info
section:
ASSUME  FS:NOTHING
pushad
call delta
delta:
pop ebp
sub ebp, offset delta; ebp now holds where we are (basically)

call  GetKernelBase, dword ptr [esp+20h]
or    EAX, EAX
jz    QUIT
mov   [ebp+dwKernelBase], EAX

; collect all API's addresses needed here
lea eax, [ebp+OFFSET szLoadLibrary]
CALL  GetProcAddr, [ebp+dwKernelBase], eax
OR    EAX, EAX
JZ    QUIT
MOV   [ebp+_LoadLibrary], EAX

lea  eax, [ebp+OFFSET szGetProcAddress]
CALL  GetProcAddr, [ebp+dwKernelBase], eax
OR    EAX, EAX
JZ    QUIT
MOV   [ebp+_GetProcAddress], EAX

lea  eax, [ebp+OFFSET szExitProcess]
CALL  GetProcAddr, [ebp+dwKernelBase], eax
OR    EAX, EAX
JZ    QUIT
MOV   [ebp+_ExitProcess], EAX

lea  eax, [ebp+OFFSET szUser32]
CALL  [ebp+_LoadLibrary], eax
OR    EAX, EAX
JZ    QUIT
MOV   [ebp+dwUserBase], EAX

lea eax, [ebp+OFFSET szMessageBox]
CALL  GetProcAddr, [ebp+dwUserBase], eax
OR    EAX, EAX
JZ    QUIT
MOV   [ebp+_MessageBox], EAX



szLoadLibrary  db "LoadLibraryA",0
szGetProcAddress db "GetProcAddress",0
szExitProcess  db "ExitProcess",0
szUser32  db "user32",0
szMessageBox  db "MessageBoxA",0
szInfoCap  db "- Hello! -",0

_LoadLibrary  dd 0
_GetProcAddress  dd 0
_ExitProcess  dd 0
_MessageBox  dd 0

SEH    sSEH <0>
dwKernelBase  dd 0
dwUserBase  dd 0
oep   dd 4010cch ; HOSTS OEP

; returns NULL in the case of an error
GetKernelBase:
mov edi, [esp+4]

lea  eax, [ebp+OFFSET SehHandler]
push eax
push  dword ptr FS:[0]
lea eax, [ebp+offset SEH]
assume eax:ptr sSEH
MOV   [eax].OrgEsp, ESP
MOV   [eax].OrgEbp, EBP
lea ebx, [ebp+OFFSET ExceptCont]
MOV   [eax].SaveEip, ebx
MOV   FS:[0], ESP
assume eax:

; start the search
AND   EDI, 0FFFF0000h ; wipe the LOWORD !
.WHILE TRUE
    .IF WORD PTR [EDI] == IMAGE_DOS_SIGNATURE
        MOV  ESI, EDI
        ADD  ESI, [ESI+03Ch]
        .IF  DWORD PTR [ESI] == IMAGE_NT_SIGNATURE
           .BREAK
        .ENDIF
    .ENDIF
           ExceptCont:
    SUB  EDI, 010000h
    .IF EDI < MIN_KERNEL_SEARCH_BASE
        MOV  EDI, 0BFF70000h
        .BREAK
    .ENDIF
.ENDW
XCHG  EAX, EDI

POP   dword ptr FS:[0]
ADD   ESP, 4
ret 4

; returns address or NULL in the case of an error
GetProcAddr:
lea  eax, [ebp+OFFSET SehHandler]
push eax
push  dword ptr FS:[0]
lea eax, [ebp+offset SEH]
assume eax:ptr sSEH
MOV   [eax].OrgEsp, ESP
MOV   [eax].OrgEbp, EBP
lea ebx, [ebp+OFFSET ExceptCont]
MOV   [eax].SaveEip, ebx
MOV   FS:[0], ESP
assume eax:

; check PE Signarue
MOV   ESI, [esp+0ch]
CMP   WORD PTR [ESI], IMAGE_DOS_SIGNATURE
JNZ  @@BadExit
ADD   ESI, [ESI+03Ch]
CMP   DWORD PTR [ESI], IMAGE_NT_SIGNATURE
JNZ  @@BadExit

; get the string length of the target Api
MOV   EDI, [esp+10h]
MOV   ECX, MAX_API_STRING_LENGTH
XOR   AL, AL
REPNZ  SCASB
MOV   ECX, EDI
SUB   ECX, [esp+10h]   ; ECX -> Api string length

; trace the export table
MOV   EDX, [ESI+078h]   ; EDX -> Export table
ADD   EDX, [esp+0ch]
ASSUME  EDX:PTR IMAGE_EXPORT_DIRECTORY
MOV   EBX, [EDX].AddressOfNames ; EBX -> AddressOfNames array pointer
ADD   EBX, [esp+0ch]
XOR   EAX, EAX   ; EAX AddressOfNames Index
.REPEAT
    MOV   EDI, [EBX]
    ADD   EDI, [esp+0ch]  ; imagebase
    MOV   ESI, [esp+10h]  ; szAPI
    PUSH  ECX   ; save the api string length
    REPZ CMPSB
    .IF ZERO?
        ADD  ESP, 4
        .BREAK
    .ENDIF
    POP   ECX
    ADD   EBX, 4
    INC   EAX  
.UNTIL EAX == [EDX].NumberOfNames

; did we found sth ?
.IF EAX == [EDX].NumberOfNames
    JMP @@BadExit
.ENDIF

; find the corresponding Ordinal
MOV   ESI, [EDX].AddressOfNameOrdinals
ADD   ESI, [esp+0ch]
PUSH  EDX   ; save the export table pointer
MOV   EBX, 2
XOR   EDX, EDX
MUL   EBX
POP   EDX
ADD   EAX, ESI
XOR   ECX, ECX
MOV   WORD PTR CX, [EAX] ; ECX -> Api Ordinal

MOV   EDI, [EDX].AddressOfFunctions; get the address of the api
XOR   EDX, EDX
MOV   EBX, 4
MOV   EAX, ECX
MUL   EBX
ADD   EAX, [esp+0ch]
ADD   EAX, EDI
MOV   EAX, [EAX]
ADD   EAX, [esp+0ch]  ; dwDllBase
JMP   @@ExitProc

ASSUME  EDX:
 


SehHandler PROC C pExcept:DWORD,pFrame:DWORD,pContext:DWORD,pDispatch:DWORD
MOV  EAX, pContext
ASSUME  EAX:PTR CONTEXT
PUSH  SEH.SaveEip
POP   [EAX].regEip
PUSH  SEH.OrgEsp
POP   [EAX].regEsp
PUSH  SEH.OrgEbp
POP   [EAX].regEbp
MOV   EAX, ExceptionContinueExecution
RET
SehHandler ENDP


PM MAIL   Вверх
p0s0l
Дата 24.11.2003, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Переделал под Delphi, но т.к. я не особый знаток асма, возникли такие вопросы:
1)прога подразумевает запись в сегмент кода ? Хм...
2)что за структуры sSEH и CONTEXT ?
3)чему равны константы MIN_KERNEL_SEARCH_BASE и MAX_API_STRING_LENGTH
4)в коде есть переходы на неопределенные метки (@Quit, @@BadExit, @@ExitProc)

Такие вопросные места отмечены как confused.gif
Код
type
 _EXCEPTION_DISPOSITION = (
   ExceptionContinueExecution,
   ExceptionContinueSearch,
   ExceptionNestedException,
   ExceptionCollidedUnwind);

 sSEH = record confused.gif
   SaveEip : cardinal;
   OrgEsp : cardinal;
   OrgEbp : cardinal;
 end;

 CONTEXT = record confused.gif
   regEsp, regEbp, regEip : cardinal;
 end;

const
 MIN_KERNEL_SEARCH_BASE = 1; confused.gif
 MAX_API_STRING_LENGTH = 255; confused.gif

procedure AsmProc; assembler;
asm
 pushad
 call @Delta
@Delta:
 pop ebp
 sub ebp, offset @Delta

 push dword ptr [esp+20h]
 call @GetKernelBase
 or eax, eax
 jz @Quit
 mov [ebp + @dwKernelBase], eax

// collect all API's addresses needed here
 lea eax, [ebp + @szLoadLibrary]
 push eax
 push [ebp + @dwKernelBase]
 call @GetProcAddr
 or eax, eax
 jz @Quit
 mov [ebp + @_LoadLibrary], eax

 lea eax, [ebp + @szGetProcAddress]
 push eax
 push [ebp + @dwKernelBase]
 call @GetProcAddr
 or eax, eax
 jz @Quit
 mov [ebp + @_GetProcAddress], eax

 lea eax, [ebp + @szExitProcess]
 push eax
 push [ebp + @dwKernelBase]
 call @GetProcAddr
 or eax, eax
 jz @Quit
 mov [ebp + @_ExitProcess], eax

 lea eax, [ebp + @szUser32]
 push eax
 call [ebp + @_LoadLibrary]
 or eax, eax
 jz @Quit
 mov [ebp + @dwUserBase], eax

 lea eax, [ebp + @szMessageBox]
 push eax
 push [ebp + @dwUserBase]
 call @GetProcAddr
 or eax, eax
 jz @Quit
 mov [ebp + @_MessageBox], eax

//////////////////////////////////
////////////////////////////////// There is your code
//////////////////////////////////

@Quit: confused.gif
 popad
 ret

@szLoadLibrary:     db "LoadLibraryA", 0
@szGetProcAddress:  db "GetProcAddress",0
@szExitProcess:     db "ExitProcess",0
@szUser32:          db "user32",0
@szMessageBox:      db "MessageBoxA",0
@szInfoCap:         db "- Hello! -",0

@_LoadLibrary:      dd 0
@_GetProcAddress:   dd 0
@_ExitProcess:      dd 0
@_MessageBox:       dd 0

@SEH:               dd 0, 0, 0 confused.gif
@dwKernelBase:      dd 0
@dwUserBase:        dd 0
@oep:               dd 4010cch // HOSTS OEP

// returns NULL in the case of an error
@GetKernelBase:
 mov edi, [esp + 4]

 lea eax, [ebp + @SehHandler]
 push eax
 push dword ptr fs:[0]

 lea eax, [ebp + @SEH]
 mov [eax + sSEH.OrgEsp], esp
 mov [eax + sSEH.OrgEbp], ebp
 lea ebx, [ebp + @ExceptCont]
 mov [eax + sSEH.SaveEip], ebx

 and edi, 0FFFF0000h // wipe the LOWORD !
@While:
 cmp word ptr [edi], IMAGE_DOS_SIGNATURE
 jne @ExceptCont
 mov esi, edi
 add esi, [esi + 03Ch]
 cmp dword ptr [esi], IMAGE_NT_SIGNATURE
 je @Break1

@ExceptCont:
 sub edi, 010000h
 cmp edi, MIN_KERNEL_SEARCH_BASE
 jae @While

 mov edi, 0BFF70000h
@Break1:
 xchg eax, edi

 pop dword ptr fs:[0]
 add esp, 4
 ret 4

// returns address or NULL in the case of an error
@GetProcAddr:
 lea eax, [ebp + @SehHandler]
 push eax
 push dword ptr fs:[0]
 lea eax, [ebp + @SEH]
 mov [eax + sSEH.OrgEsp], esp
 mov [eax + sSEH.OrgEbp], ebp
 lea ebx, [ebp + @ExceptCont]
 mov [eax + sSEH.SaveEip], ebx
 mov fs:[0], esp

// check PE Signature
 mov esi, [esp + 0ch]
 cmp word ptr [esi], IMAGE_DOS_SIGNATURE
 jnz @@BadExit
 add esi, [esi + 03Ch]
 cmp dword ptr [esi], IMAGE_NT_SIGNATURE
 jnz @@BadExit

// get the string length of the target Api
 mov edi, [esp + 10h]
 mov ecx, MAX_API_STRING_LENGTH
 xor al, al
 repnz scasb
 mov ecx, edi
 sub ecx, [esp + 10h] // ECX -> Api string length

// trace the export table
 mov edx, [esi + 078h] // EDX -> Export table
 add edx, [esp + 0ch]
 mov ebx, [edx + IMAGE_EXPORT_DIRECTORY.AddressOfNames] // EBX -> AddressOfNames array pointer
 add ebx, [esp + 0ch]
 xor eax, eax // EAX AddressOfNames Index
@Repeat:
 mov edi, [ebx]
 add edi, [esp + 0ch] // imagebase
 mov esi, [esp + 10h] // szAPI
 push ecx // save the api string length
 repz cmpsb
 jnz @NotZero
 add esp, 4
 jmp @Break2
@NotZero:
 pop ecx
 add ebx, 4
 inc eax
 cmp eax, [edx + IMAGE_EXPORT_DIRECTORY.NumberOfNames]
 jne @Repeat

@Break2:
// did we found sth ?
 cmp eax, [edx + IMAGE_EXPORT_DIRECTORY.NumberOfNames]
 je @@BadExit

// find the corresponding Ordinal
 mov esi, [edx + IMAGE_EXPORT_DIRECTORY.AddressOfNameOrdinals]
 add esi, [esp + 0ch]
 push edx // save the export table pointer
 mov ebx, 2
 xor edx, edx
 mul ebx
 pop edx
 add eax, esi
 xor ecx, ecx
 mov word ptr cx, [eax] // ECX -> Api Ordinal

 mov edi, [edx + IMAGE_EXPORT_DIRECTORY.AddressOfFunctions] // get the address of the api
 xor edx, edx
 mov ebx, 4
 mov eax, ecx
 mul ebx
 add eax, [esp + 0ch]
 add eax, edi
 mov eax, [eax]
 add eax, [esp + 0ch] // dwDllBase
 jmp @@ExitProc
 
@@BadExit: confused.gif
 xor eax, eax
 
@@ExitProc: confused.gif
 ret

@SehHandler:
 mov eax, [esp + 010h]
 push dword ptr [@SEH + sSeh.SaveEip]
 pop [eax + CONTEXT.regEip]
 push dword ptr [@SEH + sSeh.OrgEsp]
 pop [eax + CONTEXT.regEsp]
 push dword ptr [@SEH + sSeh.OrgEbp]
 pop [eax + CONTEXT.regEbp]
 mov eax, ExceptionContinueExecution
 ret
end;




--------------------
С уважением, г-н Посол.
PM   Вверх
oleg1973
Дата 26.11.2003, 03:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 7
Всего: 34



как длинно все раписали вы smile.gif
вот без SEH делает smile.gif
сами оптимизируйте лениво мне smile.gif

start:
pop eax
push eax
call findkbase
call get_f
mov esi,fname
call findfunc
mov [fadr],ebx

mov esi,fname1
call findfunc
mov [fadr1],ebx

push user32
call dword [fadr]
mov [userhdr],eax
push fname2
push eax
call dword [fadr1]
push 0
push fname
push fname
push 0
call eax
ret
findfunc:

xor ebx,ebx
mov edi,[fname_base]
fnd2:
mov eax,[esi]
cmp [edi],eax
jz stest
fnd:
cmp [edi], byte 0
jz fnd1
inc edi
jmp fnd
fnd1:
inc edi
inc ebx
jmp fnd2
stest:
push esi
push edi
stesta:
mov al,[esi]
cmp [edi],al
jnz stest1
cmp al,0
jz yes
inc edi
inc esi
jmp stesta
stest1:
pop edi
pop esi
jmp fnd
yes:
pop edi
pop esi
shl ebx,2
mov edi,[fadr_base]
add edi,ebx
mov ebx,[edi]
add ebx,[kernel_base]
ret

get_f:
mov esi,[eax+78h]
add esi,[kernel_base]
add esi,20h
mov esi,[esi]
add esi,[kernel_base]
mov esi,[esi]
add esi,[kernel_base]
mov [fname_base],esi
mov esi,[eax+78h]
add esi,[kernel_base]
add esi,1ch
mov esi,[esi]
add esi,[kernel_base]
mov [fadr_base],esi
ret
findkbase:
shr eax,6
mov edx,64
mul edx
mov bx,'MZ'
next:
cmp [eax],word bx
jz found
sub eax,64
jmp next
found:
mov [kernel_base],eax
mov ebx,[eax+3ch]
add eax,ebx
mov [pe_hdr],eax
ret
fname:
db 'LoadLibraryA',0
fname1:
db 'GetProcAddress',0
fname2:
db 'MessageBoxA',0

fadr:
dd 0
fadr1:
dd 0
fadr2:
dd 0
user32:
db 'user32.dll',0
userhdr:
dd 0
kernel_base:
dd 0
pe_hdr:
dd 0
fname_base:
dd 0
fadr_base:
dd 0




--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 26.11.2003, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



oleg1973, если знаешь структуру SEH и CONTEXT, то распиши - уже не раз их встречал, и нигде не описано что там внутри......


--------------------
С уважением, г-н Посол.
PM   Вверх
guest__
Дата 9.1.2004, 19:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код
.386
.model flat,stdcall
option casemap:none
include ..\..\include\windows.inc
include ..\..\include\kernel32.inc
includelib ..\..\lib\kernel32.lib
includelib C:\WINDOWS\System32\msvcrt.dll
.data
LibName db 'msvcrt.dll',0
hLib dd 1 dup(0)
fcnameprintf db 'printf',0
fcnamegetch db '_getch',0
msg db 'Hello Masm',0
buff db 5 dup(0)
.stack 100h
.code
start:
;invoke FreeConsole
;invoke AllocConsole
invoke LoadLibrary,addr LibName
mov hLib,eax

invoke GetProcAddress,hLib,addr fcnameprintf
cmp eax,0
je exit
push offset msg
call eax;prtinf

invoke GetProcAddress,hLib,addr fcnamegetch
cmp eax,0
je exit
call eax;getch

exit: invoke FreeLibrary,hLib
;invoke FreeConsole
invoke ExitProcess,0
end start
MakeFile:
Код

@echo off
..\..\BIN\Ml /c /coff  hm.asm
..\..\BIN\Link /SUBSYSTEM:CONSOLE /RELEASE hm.obj
echo.
прога вызывает функции printf(); and _getch();
из библы MSVCRT.DLL
  Вверх
Guest
Дата 9.1.2004, 19:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











блин только щас дошло что без invoke и лишних inc (((
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0554 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.