Assembly 如何从代码到十六进制再到asci
我在读一个有人回答的问题: 他们提到 位置0x4024FFA4处的字符串读取43 4F 4D 50 55 54 45 52 00,当解释为ASCII时,可以将其解码到“计算机”。注意,每个地址的字节顺序意味着我们必须从右向左读取字节Assembly 如何从代码到十六进制再到asci,assembly,mips,Assembly,Mips,我在读一个有人回答的问题: 他们提到 位置0x4024FFA4处的字符串读取43 4F 4D 50 55 54 45 52 00,当解释为ASCII时,可以将其解码到“计算机”。注意,每个地址的字节顺序意味着我们必须从右向左读取字节 我想看看他们是怎么把0x4024FFA4变成434F4D505554455200的。我不知道他们是怎么做到的。我能够使用asci表将十六进制代码输入计算机。但是我不知道字符串代码是什么,它非常简单。如果不观察正在运行的程序或至少反汇编的代码(如果字符串存储在静态位置
我想看看他们是怎么把0x4024FFA4变成434F4D505554455200的。我不知道他们是怎么做到的。我能够使用asci表将十六进制代码输入计算机。但是我不知道字符串代码是什么,它非常简单。如果不观察正在运行的程序或至少反汇编的代码(如果字符串存储在静态位置),就无法从指针(0x4024FFA4)获取字符 但一般来说,如果您有: char*mystring 然后在gdb中检查mystring,例如,将打印指针,指针可以是任何东西(但在他们的例子中是上面的地址)。从那里,您可以通过检查打印位置的字节和以下地址((char)0x4024FFA4,(char)0x4024FFA5,等等)来获取字母
添加:在链接的帖子中,第一列显示地址0x4024FFA4处的内存。所以你就去那里读字符。我不明白“字符串代码”是什么?字符串是“computer\0”,看起来像43 4F 4D 50 55 54 45 52 00。字符串存储在内存中的位置取决于程序的加载。字符串存储在内存中的“顺序”取决于体系结构。我相信x86/x64从右向左存储。但我如何从0x4024FFA4到43 4F 4D 50 55 54 45 52 00您如何从0x4024FFA4到43 4F 4D 50 55 54 45 52 00?您将转到标有地址0x4024FFA4的位置的第一列。在这里您可以看到0x504d4f43。由于这是以小尾端打印的单词,所以每个单词中的字节都是颠倒的,所以您以相反的顺序读取它们。0x50 | 4d | 4f | 43->0x | 43 | 4f | 4d | 50。。。转换为ASCII的是COMP。更高的地址印在上面。所以,0x52455455->字节的倒序->UTER,下一个字节是零(字符串的结尾)。啊,非常感谢我现在看到了它,你怎么知道你应该只读取前两个字符串并停在那里,而不是读取更少或读取更多。字符串总是以第一个零字节结尾,第三个字的第一个字节是0。