{
int vmbase = 0;
bool matched = false;
while(objdump.output())
{
if(!objdump.output()) break;
if(line.empty()) continue;
const char *lineptr = line.c_str();
if(!
skipString(
"LOAD", lineptr, &lineptr))
continue;
if(!
skipString(
"off", lineptr, &lineptr))
continue;
char *endptr = 0;
int initialBase = strtol(lineptr, &endptr, 16);
if(lineptr == endptr) continue;
lineptr = endptr;
if(!
skipString(
"vaddr", lineptr, &lineptr))
continue;
int finalBase = strtol(lineptr, &endptr, 16);
if(lineptr == endptr) continue;
vmbase=finalBase - initialBase;
matched = true;
break;
}
if(!matched)
{
fprintf(stderr,
"Cannot determine VM base address for %s\n",
NAME.c_str());
fprintf(stderr,
"Error while running `objdump -p %s`\n",
NAME.c_str());
}
{
if(line.empty()) continue;
const char *begin = line.c_str();
char *endptr = 0;
int address = strtol(begin, &endptr, 10);
if(endptr == begin) continue;
if(*endptr++ != ' ') continue;
if(*endptr++ != ' ') continue;
char *symbolName = endptr;
while(*endptr && !
isspace(*endptr)) endptr++;
if(*endptr != 0) continue;
if(symbolName[0] == '.') continue;
int offset = address-vmbase;
}
}