C++ 偏移量0x80000000000000ul到底是多少?
我在窥探源代码时看到过它,主要是用来抵消我所知道的。但我有点困惑到底是什么C++ 偏移量0x80000000000000ul到底是多少?,c++,c,memory,offset,xbox360,C++,C,Memory,Offset,Xbox360,我在窥探源代码时看到过它,主要是用来抵消我所知道的。但我有点困惑到底是什么 它到底指向哪里 0x80000000000000UL和0x80000000UL之间的区别是什么?除了UL,我知道这使它成为一个无符号长字符 如果我要去搞乱物理内存(假设我有一个系统可以让我这样做),如果需要的话,我会如何在代码中使用它 为了澄清,我现在的主要困惑是理解在处理内存位置时如何使用如此大的值。我通常看不到在引用偏移量时使用的那种值 我在Xbox360上为自制软件做了一些编程,所以我主要是在那里看到的。下面是
- 它到底指向哪里
- 0x80000000000000UL和0x80000000UL之间的区别是什么?除了UL,我知道这使它成为一个无符号长字符
dprintf("Dumping HV....\n");
UINT64 dest = 0x8000010600032500ULL;
BYTE* pbPayload = (BYTE*)XPhysicalAlloc(0x100, MAXULONG_PTR, 0, PAGE_READWRITE);
memcpy(pbPayload, hvPayload, 112);
UINT64 src = 0x8000000000000000ULL + ((DWORD)MmGetPhysicalAddress(pbPayload));
BYTE* pbHypervisor = (BYTE*)XPhysicalAlloc(0x40000, MAXULONG_PTR, 0, PAGE_READWRITE);
memset(pbHypervisor, 0, 0x40000);
UINT64 xArg = 0x8000000000000000ULL + ((DWORD)MmGetPhysicalAddress(pbHypervisor));
HvxGetVersion(0x72627472, 4, dest, src, 0x40, xArg);
dprintf("HV dumped\nSaving HV....\n");
注意:HvxGetVersion
读取内存
我能想到的另一个地方是libxenon,它是一个库,用于帮助创建自制程序,从很少到没有预先存在的代码
void *target = (void*)(((unsigned long)0x8000000000000000UL) | shdr->sh_addr);
if (shdr->sh_type == SHT_NOBITS) {
memset (target, 0, shdr->sh_size);
} else {
memcpy ((void *) target,
(unsigned char *) addr + shdr->sh_offset,
shdr->sh_size);
}
flush_code (target, shdr->sh_size);
puts("done");
这是一个很大的正数。它不是指针。你的第二个问题就像在问“100和10000之间的区别是什么”。如果您可以发布您看到的一些代码,您的问题将得到很大改善。0x8000000是一个32位或4字节的int值,其中另一个是8字节长,这只是一些随机内存偏移量。它们是xbox特有的。也许这是用户空间内存的开始(一个32位,另一个64位)?或者,可能这是一个物理内存映射的地址?@molbdnilo To smart ass反驳你的smart ass评论:你通过减法而不是除法得到差。:)这个问题还不清楚。这是一个数字:你给它一个意义。