我正在編寫一個程序,我必須修改目標進程內存/讀取它。C - 爲什麼在進行指針算術時轉換爲uintptr_t vs char *
到目前爲止,我使用void *的存儲地址還有投那些爲char *如果我需要改變(增加抵消或一般修改)
我聽說類型的stdint.h定義,但我沒有看到使用它作爲char *轉換的指針算法的區別(這看起來對我來說更適合C89)
所以我的問題:這兩種方法應該用於指針算術?在任何情況下,我是否應該考慮在char *上使用uintptr_t?
編輯1
基本上,我只需要知道,如果這會產生
0x00F00BAA hard coded memory adress in target
process
void* x = (void*)0x00F00BAA;
char* y = (void*)0x00F00BAA;
x = (uintptr_t)x + 0x123;
y = (char*)y + 0x123;
x == y?
x == (void*)0x00F00CCD?
y == (void*)0x00F00CCD?
我認爲這個標準並不能保證對一個'uintptr_t'變量進行算術修改後跟一個強制轉換爲'char *'會得到與將數學直接應用到'char *'相同的結果'uintptr_t'源自於,儘管我認爲如果這不成立,它會變得瘋狂。 – PSkocik
@PSkocik當然不支持,它根本就不瘋狂。 –
@AnttiHaapala如果我將uintptr_t移動3,我也希望相應的char *移動3.我不明白爲什麼平面內存模型平臺會想要做一些不同的事情。 – PSkocik