我有一个C ++代码,可以在屏幕上打印一个字符串,如下所示:
cout << "Hello, World" << endl
我需要做的是,使用Visual Studio内存反汇编程序,找到该字符串文字中第一个字符的内存地址(&#34; Hello,World&#34;)(在这种情况下,字母& #39; H&#39;和最后一个)
我该怎么做?
谢谢。
答案 0 :(得分:1)
您可以使用private string combinedString ( string [] pieces )
{
string alltogether = "";
foreach (string thispiece in pieces) alltogether += alltogether + thispiece;
return alltogether;
}
打印地址(不知道如何直接使用反汇编程序)
cout
或者,如果您需要存储字符串文字,
std::cout << (void*)"Hello, World";
完整示例 Live on Ideone
const char* str = "Hello, World";
std::cout << (void*)str;
正如您在运行示例中所看到的,字符串文字#include <iostream>
int main()
{
const char* ptr = "Hello, World";
std::cout << (void*)ptr << std::endl;
std::cout << (void*)"Hello, World" << std::endl;
}
和"Hello, World"
实际上使用相同的内存(编译器足够聪明,可以实现您有2个相同的字符串文字,所以它只是为一个人分配内存。)
答案 1 :(得分:0)
您可以使用一点装配。下一代码是使用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" );
结果如下: