Где и как я могу точно узнать, что делает этот ассемблерный код для его преобразования в C++?
Я хочу преобразовать следующий код в C++.
.globl _start
_start:
.set DLLLoaderHook, 0x823326A8
.set LoadLibraryA, 0x82332B10
.set DLLLoaderString, 0x82000870
.long DLLLoaderString
.long (9f-0f)/4
0:
.string "game:\\Tesseract.dll"
.align 1
9:
.long DLLLoaderHook
.long (9f-0f)/4
0:
lis %r11, DLLLoaderString@h
ori %r3, %r11, DLLLoaderString@l
bl (LoadLibraryA - (DLLLoaderHook + 0x8))
9:
.long 0xFFFFFFFF
Я знаю, что мне нужно понять, что делает каждая строка этого ассемблерного кода, прежде чем я смогу начать думать о преобразовании его в C++. В настоящее время я почти ничего не понимаю в этом коде. Я не прошу никого преобразовывать это в C++, я спрашиваю, что делает каждая строка этого кода, чтобы я мог получить понимание, чтобы преобразовать это сам. Для пояснения, я считаю, что это PowerPC Assembly. Я довольно много гуглил, прежде чем приехать сюда, чтобы спросить об этом. Я надеялся, что Google поможет мне понять, что мне нужно, но я не чувствую, что понимаю это.
1 ответ
lis %r11, DLLLoaderString@h
ori %r3, %r11, DLLLoaderString@l
Эти два выше загружают%r3 с указателем на DLLLoaderString. Для DLLLoaderString установлено значение "game:\Tesseract.dll"
bl (LoadLibraryA - (DLLLoaderHook + 0x8))
Это выше - ветвление и связывание (то есть вызов функции) с некоторым местоположением. Похоже, что это LoadLibraryA.
%r3 определяется в ISP PowerPC как первый параметр функции. Так..
Похоже, что он вызывает функцию LoadLibraryA с указателем на строку "game:\Tesseract.dll" в качестве первого аргумента (первый аргумент%r3). т.е.
char *DLLLoaderString = "game:\\Tesseract.dll";
LoadLibraryA(DLLLoaderString);