main.cc
#include <string>
#include <iostream>
void print(std::string& s) {
std::cout << s << std::endl;
}
int main() {
std::string s("hello");
print(s);
return 0;
}
编译
g++ main.cc -std=c++11 -o aa
查找print函数的符号
$ readelf -s -W aa | grep print
42: 0000000000400cb6 21 FUNC LOCAL DEFAULT 14 _GLOBAL__sub_I__Z5printRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
64: 0000000000400b96 45 FUNC GLOBAL DEFAULT 14 _Z5printRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
$ c++filt _Z5printRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
print(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)
运行
$ gdb aa
(gdb) b _Z5printRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
(gdb) r
(gdb)p *(char**)$rdi
$1 = 0x7fffffffdd20 "hello"