Где и как я могу точно узнать, что делает этот ассемблерный код для его преобразования в 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);
Другие вопросы по тегам