Как найти основную функцию с помощью pintool - PullRequest
0 голосов
/ 25 марта 2020

Я новичок в написании программ для pintool. Я хочу найти основную функцию целевой программы с помощью PIN-кода. Но я всегда получал UnNamedImageEntryPoint с SYM_Name () и RTN_Name. Я думаю, что отсутствие символов вызвало это. Так есть ли решение для меня, чтобы найти основную функцию, когда нет символов? Это моя основная функция:

int main(int argc, char *argv[]) {
    PIN_InitSymbols();
    init_all();
    if (PIN_Init(argc, argv)) return Usage();
    INS_AddInstrumentFunction(Instructions, 0);
    IMG_AddInstrumentFunction(ImageLoad, 0);
    PIN_AddFiniFunction(Fini, 0);
    PIN_StartProgram();
    return 0;
}

И вот как я ищу основную функцию:

VOID ImageLoad(IMG img, VOID *v) {
    if (IMG_IsMainExecutable(img)) {
        for (SYM sym = IMG_RegsymHead(img); SYM_Valid(sym); sym = SYM_Next(sym)) {
            string undFuncName = PIN_UndecorateSymbolName(SYM_Name(sym), UNDECORATION_NAME_ONLY);
            output<<undFuncName<<endl;
            if (undFuncName == "main") {
                RTN_InsertCall(rtn, IPOINT_BEFORE,(AFUNPTR)onMainStarted, IARG_END);
            }
        }
    }
}

Это все undFuncName, которое я получил.

unnamedImageEntryPoint
.text
...