Что нового

Работа с Ассемблером, регистрами и стеком

P@S@f

Новичок
Сообщения
44
Репутация
2
Вот хотелось бы узнать какие возможности у AutoIt'a насчёт ассемблирования, работы со стеком и регистрами.
В С, С++ ведь есть ассемблерные вставки :smile: Почему бы и здесь не быть некому их подобию? :IL_AutoIt_1:
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Мне известна возможность работы с библиотеками *.dll.
Других способов не знаю.
Вот читал как-то пример для AutoHotkey на http://www.script-coding.info/
тут
http://forum.script-coding.info/viewtopic.php?id=3465
 
Автор
P

P@S@f

Новичок
Сообщения
44
Репутация
2
Т.е. как я понял вот это из себя и представляет асм вставку
Код:
Hex =        ; Собственно машинный код, в HEX-виде.
    (Join LTrim 
    5553575689E583EC0C8B5D148B4D1831C083F9020F8CCE0000008D344B89D983
    7D1C00740E0FBAEE0066C701322083C102EB09C7010200000083C104894DF489
    DFC745FC01000000FC83C70439F70F87850000008B0785C078EFFF45FC89F829
    D8D1E8400FBAE600732F505357568B7DF4BB0A00000031C989E64EC606204131
    D2F7F380C2304E88164185C075F1F3A4897DF45E5F5B58EB0B8B4DF4890183C1
    04894DF489C1F7E0729F3B4518779A48D1E001D8BAFFFFFFFF891089C789C8C1
    E00201C739F777048917EBF6D1E883E8028D3C03E970FFFFFF8B45FC0FBAE600
    73068B55F4C6020089EC5E5F5B5DC20C00
    )
    VarSetCapacity(Code, Len := (StrLen(Hex) // 2)) ; Переменная под код.
    Char := Offset := -1
    Loop, % Len            ; Запись кода функции в переменную.
        NumPut("0x" . SubStr(Hex, Char += 2, 2), Code, ++Offset, "Char")
    VarSetCapacity(Buf, (Limit+1) * 2, 0)    ; Под найденные простые числа.
    ; Вызов машинной функции. Вернёт количество найденных простых.
    ; Первый аргумент DllCall — адрес переменной, куда был записан код.
    Found := DllCall(&Code, "uint", &Buf, "uint", Limit, "int", ToString)

Теперь бы еще с этим разобраться, хех :wacko:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
P@S@f
то что ты привел - есть код на AHK, раннем ответвлении AutoIt, еще с версии 2+.
 
Автор
P

P@S@f

Новичок
Сообщения
44
Репутация
2
Значит вот с чем теперь предстоит разобраться
Код:
Local $Opcode = '0x83EC14B83400000099538B5C2420558B6C242056578B7C9DFCF7FB89C683C606C74424180000000085F68D76FF0F8EEA000000896C24288D4BFF8D549D00894C2410895424148974242081442418B979379E8B4C2418C1E90281E103000000894C241C31F6397424107E568B5424288BCF8B6CB204C1E9058D14AD0000000033CA8BD58BC7C1EA03C1E00433D003CA8B5424188BDE81E303000000335C241C8B4424308B1C9833D533DF03D333CA8B542428010CB28B0CB2463974241089CF7FAA8B5424288BCF8B2AC1E9058D14AD0000000033CA8BD58BC7C1EA03C1E00433D003CA8B5424188BDE81E303000000335C241C8B4424308B1C9833D533DF03D3FF4C242033CA8B542414014AFC8B4AFC8B54242089CF420F8F2DFFFFFF5F31C05E5D5B83C414C21000'
	Local $CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]")
	DllStructSetData($CodeBuffer, 1, $Opcode)

	Local $V = DllStructCreate("byte[" & Ceiling($DataLen / 4) * 4 & "]")
	DllStructSetData($V, 1, $Data)

	Local $K = DllStructCreate("byte[16]")
	DllStructSetData($K, 1, $Key)

	DllCall("user32.dll", "none", "CallWindowProc", "ptr", DllStructGetPtr($CodeBuffer), _
													"ptr", DllStructGetPtr($V), _
													"int", Ceiling($DataLen / 4), _
													"ptr", DllStructGetPtr($K), _
													"int", 0)

	Local $Ret = DllStructGetData($V, 1)
 
Автор
P

P@S@f

Новичок
Сообщения
44
Репутация
2
Это точно..
А то я уже забил хоть что-то нормальное сделать...
Придется в самом дебаггере дальше копать... искать функцию, а там уже смотреть как можно её изменить не доставая адрес..
 
Верх