Sulphide
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору persicum Раньше, когда мне нужны были опкоды, я делал их в ollydbg. Сегодняшняя замена ему это x64dbg (https://x64dbg.com), очень хороший преемник у Ollydbg. Проверил вышеуказанную в ветке команду и всё ок: C5F5EFC2 vpxor ymm0,ymm1,ymm2 Кстати у него довольно неплохая внутренняя справка по мнемоникам, если что. Правой клавишей мышки по мнемонике в отладчике и "Справка по мнемонике" или просто Ctrl+F1. Попробовал в IDA ещё ассемблировать команды но она ругается "Invalid mnemonic", так что она не годится, хотя и дизасмит эту команду нормально. Может немного колхозно конечно, но свою работу выполняет. В x64dbg, лучше сразу выбрать нужный его же екзешник, т.е. x32dbg.exe или x64dbg.exe и открыть любой соответствующий этим разрядностям екзешник на отладку. Соответственно он откроется на точке входа и можно набивать инструкции по клавише пробел и сразу смотреть опкоды и копировать оттуда. ps по масму не подскажу последний раз пользовался лет 100 назад. pps дебаггер у лазаруса - это ад и израиль, конечно. )) ppps скачал сейчас еще EasyCode (asm rad ide), UASM64 и JWasm, немного геморройно настраивать пути, но в принципе никаких проблем особых от создания оконного win приложения до его компиляции не встретил. Накинул кнопку на форму в EasyCode, в обработчике нажатия кнопки (Project1Button1) впихнул vpxor ymm0,ymm1,ymm2. Uasm64 скушал её без проблем. От JWasm нужен только линкер и компилятор ресурсов вроде. Задизасмил полученный obj файлик IDA'ой и увидел эту команду в процедуре Project1Button1. В IDA можно включить отображение опкодов, если что (Options - General - Disassembly - Number of opcode bytes - поставить 10, например) Добавлено: Cамому жутко интересна стала возможность цеплять к дельфе obj файлики. Вобщем, сделал x64 VCL проект дельфи с кнопкой и одним TEdit, далее код: Код: unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; {$L Project2.obj} function TestProc1(a: byte): byte; external; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var res: Byte; begin res := TestProc1($AA); Edit1.Text := inttostr(res); end; end. | В EasyCode - New Project - Lib File, создается почти пустым, ничего страшного, что lib, т.е. obj файло тоже будет генериться. Вобщем делаем наш Project2.lib... Код: .Data? .Data .Code TestProc1 Proc FastCall Frame i:Byte Xor Rax, Rax Mov Al, i Xor Al, 0xFF Ret TestProc1 EndP | Далее в EasyCode билдим и забираем наш obj файлик и кидаем его в папку дельфи проекта. Собираем проект в дельфи и наблюдаем, что при нажатии кнопки в наш TEdit пишется 85 ($55), т.е. инверсное значение от $AA и всё работает, вобщем круто. Так же можно передавать указатели на данные для ymm, xmm регистров например и считать в них, что нужно. Frame, если не нужен можно и убрать, наверное. В UASM64\Samples\Win64\ есть пример vectorcall.asm можно посмотреть как там это делается. | Всего записей: 284 | Зарегистр. 20-03-2008 | Отправлено: 14:29 06-08-2020 | Исправлено: Sulphide, 17:06 06-08-2020 |
|