@@ -41,6 +41,7 @@ THE SOFTWARE.
41
41
struct Config {
42
42
pid_t pid = -1 ;
43
43
std::uint64_t start = 0 , stop = 0 ;
44
+ bool all = false ;
44
45
};
45
46
46
47
static unsigned long long int parse_integer (char const * value)
@@ -70,6 +71,7 @@ static int parse_config(Config& config, int argc, const char** argv)
70
71
(" pid,p" , value<pid_t >(), " PID of the target process" )
71
72
(" start-address" , value<std::string>(), " Address" )
72
73
(" stop-address" , value<std::string>(), " Address" )
74
+ (" all" , " Disassemble all symbols" )
73
75
;
74
76
variables_map vm;
75
77
store (command_line_parser (argc, argv).options (desc).run (), vm);
@@ -86,6 +88,8 @@ static int parse_config(Config& config, int argc, const char** argv)
86
88
config.start = parse_integer (vm[" start-address" ].as <std::string>().c_str ());
87
89
if (vm.count (" stop-address" ))
88
90
config.stop = parse_integer (vm[" stop-address" ].as <std::string>().c_str ());
91
+ if (vm.count (" all" ))
92
+ config.all = true ;
89
93
90
94
return 0 ;
91
95
}
@@ -118,11 +122,17 @@ int main(int argc, const char** argv)
118
122
process.load_map_file ();
119
123
120
124
unjit::Disassembler disassembler (process);
121
- if (config.start == 0 && config.stop == 0 )
122
- for (auto const & k : process.jit_symbols ())
123
- disassembler.disassemble (std::cout, k.second .value , k.second .size );
124
- else
125
+
126
+ if (config.all )
127
+ for (auto const & module : process.modules ())
128
+ for (auto const & p : module .symbols )
129
+ if (p.second .flags & SYMBOL_FLAG_CODE)
130
+ disassembler.disassemble (std::cout, p.second .value , p.second .size );
131
+
132
+ if (config.start != 0 )
125
133
disassembler.disassemble (std::cout, config.start , config.stop - config.start );
134
+ else for (auto const & k : process.jit_symbols ())
135
+ disassembler.disassemble (std::cout, k.second .value , k.second .size );
126
136
127
137
return 0 ;
128
138
}
0 commit comments