gpt4 book ai didi

c++ - 反汇编一个简单的C++程序

转载 作者:搜寻专家 更新时间:2023-10-31 01:37:18 27 4
gpt4 key购买 nike

我有一个简单的 C++ 程序:

#include <iostream>
using namespace std;

int main(){
string s;
cin >> s;
if (s == "almafa")
cout << "ok";
}

在 gdb 中,我反汇编了 main 并启动了程序,输入“测试”作为输入,并在比较 0x0000000000400bb7 处停止:

   0x0000000000400bab <+53>:    lea    -0x40(%rbp),%rax
0x0000000000400baf <+57>: mov $0x400d24,%esi
0x0000000000400bb4 <+62>: mov %rax,%rdi
0x0000000000400bb7 <+65>: callq 0x400c6a <bool std::operator==<char, std::char_traits<char>, std::allocator<char> >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)>

我检查了 esi 和 rdi 寄存器:

(gdb) x/s $esi
0x400d24: "almafa"
(gdb) x/s $rdi
0x7fffffffddc0: "\320\335\377\377\377\177"

rdi 寄存器中有什么?我预计它会包含我的输入。

最佳答案

rdi 是指向您的 std::string 对象的指针。

请注意,函数调用是针对一个 operator== 的,该操作符带有一个 const char * 参数。

std::string 类定义了一个operator==,它接受一个const char * 参数,这就是这里调用的, rdi 指向 std::string 对象的内存中表示,并且参数在 esi 中。

What is in the rdi register? I expected it will contain my input.

这不是您的输入。您的输入存储在 std::string 对象中,这就是此处所指向的内容。

关于c++ - 反汇编一个简单的C++程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34356364/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com