我有一字符串打印输出到屏幕上一个C++代码,就像这样:的Visual Studio - 获取第一个字符的内存地址字符串
cout << "Hello, World" << endl
我需要做的是,使用Visual Studio内存反汇编程序,找到该字符串文字(“你好,世界”)中的第一个字符的内存地址(在这种情况下,字母'H',和最后一个)
我该怎么做?
谢谢。
我有一字符串打印输出到屏幕上一个C++代码,就像这样:的Visual Studio - 获取第一个字符的内存地址字符串
cout << "Hello, World" << endl
我需要做的是,使用Visual Studio内存反汇编程序,找到该字符串文字(“你好,世界”)中的第一个字符的内存地址(在这种情况下,字母'H',和最后一个)
我该怎么做?
谢谢。
您可以用cout
(不知道如何直接拆装做)
std::cout << (void*)"Hello, World";
或者,如果你需要存储字符串文字打印地址,
const char* str = "Hello, World";
std::cout << (void*)str;
全部示例Live on Ideone
#include <iostream>
int main()
{
const char* ptr = "Hello, World";
std::cout << (void*)ptr << std::endl;
std::cout << (void*)"Hello, World" << std::endl;
}
正如您在运行示例中看到的,字符串文字"Hello, World"
和char* str = "Hello, World"
实际上使用的是相同的内存(编译器足够聪明,可以实现2个相同的字符串文本,因此它只为一个内存分配内存)。
您可以使用一点点的组装。接下来的代码与Visual Studio 2010中创建C++控制台项目:
void first_char (char * mystr) {
short datas;
int addr;
printf("The string is : %s\n",mystr);
__asm { mov ax, ds ;GET DATA SEGMENT.
mov datas, ds
lea esi, mystr ;GET STRING OFFSET.
mov addr, esi
}
printf("Its address is : %d:%d",datas,addr);
}
这是你如何可以调用以前的方法:
first_char("Hello, World");
结果将是这样的:
你为什么要这样做?字符串文字存储在不可写入的内存中。 – vsoftco
只是为了好玩,因为我在学习汇编语言 –
请注意,大多数操作系统在每次执行时都不会在同一地点加载数据。通常,地址是相对的或虚拟的。对于相对地址,加载器将在可执行文件加载到内存时解析它们。总之,每次地址不会是相同的值。 –