download/file.php?id=5166
Полезные мелочи:
- пути могут содержать любое количество пробелов (но не табов)
- пробелы в параметрах типа "my folder/file.me" не учитываются и считаются за один параметр
Функции:
__get_param_count - возвращает общее количество параметров
Code: Select all
на входе: esi -> указатель на строку с параметрами
на выходе: eax -> число параметров
портит: eax
Code: Select all
на входе: esi -> указатель на строку с параметрами
на входе: eax -> порядковый номер параметра, который требуется вернуть
на выходе: eax -> длина в символах возвращаемого параметра
на выходе: edx -> указатель на буффер в который записан параметр
портит: eax,edx
example.asm
Code: Select all
use32
org 0x0
db 'MENUET01'
dd 0x01
dd START
dd I_END
dd 0x1000
dd 0x1000
dd APP_PARAM ; ----> ! ВАЖНО
dd 0x0
START:
mov esi, APP_PARAM ; строка с параметрами
call __get_param_count ; вызываем функцию
mov [count],eax ; получили в eax общее количество переданных параметров
mov esi, APP_PARAM ; строка с параметрами (необязательно, т.к. esi не испорчен)
mov eax,2 ; просим вернуть 2 параметр ввиде строки
call __get_param_str ; вызываем функцию
mov [paramlen],eax; получили длину символов 2го параметра
; edx - хранит указатель на строку (256 byte), которую впринципе можно вывести через 4ю функцию
;...
;...
include "getparam.asm";
;...
;...
APP_PARAM dd 256 dup(0)
count dd 0
paramlen dd 0
Code: Select all
GP_BUFF_SIZE equ 64 ; максимальная длина возвращаемого параметра (одного) 64*4 (dd) = 256 байт
Code: Select all
example.bin /a /b="immortal/good.png" /t="sys/my folder/1.png" +O -Y #23
__get_param_count вернет: 6
__get_param_str вернет:
/a
/b="immortal/good.png"
/t="sys/my folder/1.png"
+O
-Y
#23
__get_param_type - возвращает типы
- строка (/t) (+IO) (time)
- структура (a=****)
- путь (".....")
- целочисленное (5)
- дробное (2.71)
- hex (0x0...)
__get_param_name - возвращает имя параметра если его тип "структура"
__get_param_value - возвращает значение параметра если его тип "структура"
color=0x000000 - ( color - имя, 0x000000 - значение)