簡體   English   中英

指針偏移量有什么好處?

[英]What is the benefit of offsets to pointers?

我正在使用一個稱為作弊引擎的內存編輯應用程序。 我將作弊引擎附加到游戲上。 在我的游戲中,我有一個32位整數,稱為HP。 HP存儲在內存地址A中。如果我重新啟動游戲,HP存儲在新的內存地址B中。看來,使用作弊引擎,我可以進行指針掃描並找到一個靜態內存地址C,該地址指向另一個內存地址及其伴隨的偏移量D和偏移量,以便[D +偏移量]在該會話期間始終存儲HP的內存地址。 因此,如果取消引用[D +偏移量],則始終可以獲得存儲HP的內存地址。

這是一個圖:

A或B-> HP

D +偏移量-> A或B

C-> D

使用偏移量有什么好處? 為什么C不能直接指向A或B? 我知道在使用C語言處理數組時使用偏移量是有益的。 這是否意味着每當我看到指針的偏移量時,指針就指向數組中的第一個元素,而偏移量指向數組中的一個元素?

如果您知道C編程語言,應該容易想象和理解。 您用C編寫的任何內容都非常接近在編譯程序時生成的實際機器代碼。

C語言中對象的抽象通常是通過“結構”完成的。

在您的示例中,想象一個非常簡單的“ Player”結構:

struct Player {
    int id;
    float xposition;
    float yposition;
    int health;
    int maxhealth;
};

如果要創建這樣的對象,可以執行以下操作:

struct Player *myPlayer = malloc(sizeof(struct Player));

用高級語言看起來不錯的結構化內容實際上只是編譯程序中的一塊內存。

要訪問例如“健康”,請執行myPlayer->health; 但是現在在不知道漂亮名稱並且只有一塊內存可以使用的已編譯程序中它看起來如何?

它必須使用與基本指針的偏移量。 在上面的示例中(假設Windows操作系統和任何默認配置的健全編譯器),對某些偽機代碼的訪問將類似於以下內容:

move myHealth, read4bytes[myPlayer + 12]

如果對程序進行反向工程,則無法通過偏移量訪問來判斷內存塊是結構,數組還是類(來自C ++代碼)還是完全不同的東西。

暫無
暫無

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

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