我在这里问您一个有关内核开发(特定于x86处理器)的问题,我的问题是:我想显示任何指针的十六进制地址。
我尝试了很多事情,自己弄清楚了,但是我撞墙了。
我自己实现的所有打印功能都可以使用。请记住:我是在独立的环境(GCC东西)中编码。
这是到目前为止我正在做的事情
void testPrintHex(void* someptr) {
const char* hexDigits = "0123456789ABCDEF";
uint32_t* ptr = (uint32_t*) someptr;
print("0x");
for(size_t i = 0; i < 32; i+=8) {
char c = ptr[i];
char low = c & 0x0F;
char high = (c >> 4) & 0x0F;
for(int j = 0; j <= 16; j++) {
char h = (hexDigits[j] >> 4) & 0x0F;
if(high == h) {
printChar(h);
}
}
for(int j = 0; j <= 16; j++) {
char l = hexDigits[j] & 0x0F;
if(low == l) {
printChar(l);
}
}
}
print("\n");
}
我希望这能打印该指针的内存地址。我得到什么?这个:0x
哦,有12个(2个黑桃,2个笑脸,6个正方形和2个心)奇怪的符号没有显示Stack Overflow。
答案 0 :(得分:2)
假设您要打印指针指向的接下来的4个字节,则要简单得多:
void testPrintHex(void* someptr) {
const char* hexDigits = "0123456789ABCDEF";
uint8_t* ptr = (uint8_t*) someptr;
print("0x");
for(size_t i = 0; i < 4; i++) {
char c = ptr[i];
char low = c & 0x0F;
char high = (c >> 4) & 0x0F;
printChar(hexDigits[high]);
printChar(hexDigits[low]);
}
print("\n");
}