我正在使用DWARF和ELF信息的程序中工作.我使用名为Pin的工具迷上了另一个程序.我有来自"Y"程序中声明的全局变量的地址,我把它挂钩到我的Pin模块,我称之为"X".
我得到了一堆这些全局变量的地址.不幸的是,当我试图取消引用它们时,我遇到了麻烦.例如(现在我正在手动操作以查看它是否正在执行应该执行的操作):
char * limit, * address1;
for(address1 = (char *) 0x804A040, limit = address1 + bytesize; address1 < limit; address1++)
cout << *(address1) << "\n";
Run Code Online (Sandbox Code Playgroud)
我应该得到存储在该地址中的变量,该变量是char *一个单词.在这种情况下,我是否必须取消引用两个指针?地址然后char *存储在那个地址?
当我想取消引用一个int变量时,这非常正常,但每当我尝试取消引用一个char指针或变量时,我得到的non-ASCII值......
我们怎样才能显示char变量的地址?我找到了一种使用类型转换的解决方案,通过将其转换为int或float或void等,然后使用指针显示地址.但是没有类型铸造的特定解决方案还有其他替代方案吗?使用像指针一样
char var = 'a';
char* ptr;
ptr = &var;
cout << ptr;
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,即使指针指向var的地址,但显示var的值.为什么?如果是这样那么我们如何使用指针获取var的地址?不使用类型铸造
cout << "Address of var = " << static_cast<void*>(&var) << endl;
Run Code Online (Sandbox Code Playgroud)
或者我们必须为特定问题超载任何操作员?