Visual Studio - 获取字符串中第一个字符的内存地址

时间:2015-05-07 16:30:32

标签: c++ string assembly disassembly

我有一个C ++代码,可以在屏幕上打印一个字符串,如下所示:

cout << "Hello, World" << endl

我需要做的是,使用Visual Studio内存反汇编程序,找到该字符串文字中第一个字符的内存地址(&#34; Hello,World&#34;)(在这种情况下,字母& #39; H&#39;和最后一个)

我该怎么做?

谢谢。

2 个答案:

答案 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" );

结果如下:

enter image description here