簡體   English   中英

ReadProcessMemory向后讀取內存?

[英]ReadProcessMemory reads Memory backwards?

當使用ReadProcessMemory讀取可執行文件的內存時,我得到的前兩個字節是相反的。 代碼是:

SIZE_T dataRead;
PIMAGE_DOS_HEADER dosHeader = (PIMAGE_DOS_HEADER) malloc(1);
ReadProcessMemory(process, (LPVOID)addr, dosHeader, 2, &dataRead);
printf("%x\n", dosHeader->e_magic);

以上輸出5A4D而不是4D5A。 那為什么會這樣? 這可能是結束嗎?

提前致謝。

是的,這是由於字節順序。 文件中的第一個字節是0x4d ,第二個字節是0x5a 當您使用%x打印它們時,它們被解釋為一個小端數字,因此在打印時將交換字節。 作為一個獨立的示例,請考慮以下程序:

#include <cassert>
#include <cstdio>

int main()
{
    assert(sizeof(unsigned) == 4);

    char bytes[4] = { 0x12, 0x34, 0x56, 0x78 };
    std::printf("%x\n", *reinterpret_cast<unsigned const*>(bytes));
}

在具有小端字節排序的系統上,輸出將為78563412 (此示例程序忽略了潛在的對齊問題;由於您使用的是Visual C ++,因此不會有任何問題。)

還要注意,您正在超出一個字節的分配范圍( malloc(1)但讀取了兩個字節)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM