You are not logged in.
Pages: 1
Видел скрипт, который подставлял значения в hex.
Вот например:
hex "Example" 20 "%d" 00 end
Вот сам скрипт
{$CLEO .cs} 0000: 0AA2: 31@ = load_library "kernel32.dll" // IF and SET 0AA4: 30@ = get_proc_address "GetModuleHandleA" library 31@ // IF and SET 0AA7: call_function 30@ num_params 1 pop 0 "samp.dll" 0@ 0A8E: 2@ = 0@ + 0x212AC4 0A8D: 1@ = read_memory 2@ size 4 virtual_protect 1 //0AB1: call_scm_func @CDXUTDialog__AddSlider 10 struct 1@ samp_base 0@ id 0x80 x 32 y 320 width 512 height 16 min 0 max 100000 value 100 0AC6: 10@ = label @labelTEXTFormat offset 0AC6: 3@ = label @callback offset 0A8E: 2@ = 3@ + 12 0A8C: write_memory 2@ size 4 value 10@ virtual_protect 1 0A8E: 2@ = 0@ + 0x212A24 //_cSampChatInfo 0A8D: 10@ = read_memory 2@ size 4 virtual_protect 1 //_cSampChatInfo 0A8E: 2@ = 3@ + 18 0A8C: write_memory 2@ size 4 value 10@ virtual_protect 1 0A8E: 10@ = 0@ + 0x79680 //_cSampChatInfo 0A8E: 2@ = 3@ + 24 0A8C: write_memory 2@ size 4 value 10@ virtual_protect 1 0AC6: 3@ = label @jmp offset 0A8E: 2@ = 3@ + 1 0A8E: 10@ = 0@ + 0xAD7D0 //_cSampChatInfo 0A8C: write_memory 2@ size 4 value 10@ virtual_protect 1 0AC6: 3@ = label @callback offset 0A8E: 2@ = 0@ + 0x94940 // int __stdcall CDXUTDialog__SetCallback(int pCallback, int pUserContext) 0AA6: call_method 2@ struct 1@ num_params 2 pop 0 params 0 3@ 0A93: end_custom_thread :callback hex {00} 60 //PUSHA {10} 8B4424 18 //MOV EAX, [ESP+18] {14} 50 //PUSH EAX {14} 8B4424 18 //MOV EAX, [ESP+18] {18} 50 //PUSH EAX {18} B8 11111111 //MOV EAX, 11111111h format {18} 50 //PUSH EAX {1C} B8 11111111 //MOV EAX, 11111111h cSampChatInfo {1C} 50 //PUSH EAX {20} B8 11111111 //MOV EAX, 11111111h func addDebugMessage {20} FFD0 //CALL EAX {20} 83C4 10 //ADD ESP, 10h {10} 61 //POPA end :jmp hex {10} B8 11111111 //MOV EAX, 11111111h AD7D0 CallbackDialogChat {10} FFE0 //JMP EAX end :labelTEXTFormat hex "ControlID:" 20 "0x%.8x" 20202020 "Event:" 20 "0x%.4x" 00 end //example //0AB1: call_scm_func @CDXUTDialog__AddSlider 10 struct 1@ samp_base 0@ id 0x44 x 240 y 32 width 400 height 16 min 0 max 100 value 50 :CDXUTDialog__AddSlider //A0D30 CDXUTDialog__AddSlider(int ID, int x, int y, int width, int height, int min, int max, int value, char isDefault, int ppCreated) 0A8E: 20@ = 1@ + 0xA0D30 0AA6: call_method 20@ struct 0@ parmas 10 pop 0 ppCreated 0 isDefault 0 value 9@ max 8@ min 7@ height 6@ width 5@ y 4@ x 3@ id 2@ 0AB2: ret 0
Можно ли это сделать без ассемблерных вставок и как это сделать?
То есть необходимо подставить цифры в теле hex под %d
Offline
не совсем понятен вопрос, сформулируйте его более подробно
на всякий случай, есть опкод 0AD3
Формат опкода 0AD3: 0@v = format "%d + %d = %d" 2 2 4 Описание 0AD3 форматирует строку и записывает результат в стринговую переменную или в строку по указателю. В данном примере в 0@v будет записана строка "2 + 2 = 4" Параметры 1. [out] Строка, в которую будет записан результат. Строка отвечает соглашению о строках; 2. [in] Формат строки, отвечает соглашению о строках; ... [in] Аргументы, подставляемые в строку (до 35 аргументов).
он выдает строку, заменяя параметры на нужные.
Offline
У меня вмещает только 30 аргументов. Если аргументов больше 30, то:
Access violation at address 004C59FC in module 'sanny.exe'. Write of address 0056FB4D.
Offline
Это баг. Компилятор неправильно работает с параметрами выше 32. В случае 0AD3 это первые 2 параметра опкода + 30 аргументов.
До исправления бага придется ограничиться 30-ю аргументами.
Кстати, число аргументов в любом случае будет не больше 33, т.к. максимальное число параметров для опкода равно 35.
Offline
Информация по 35 параметрам в справке устарела - это ограничение было в первых версиях. Сейчас его нет.
Offline
Pages: 1