============================== Sample 1 ============================== ASM: ;************************************************************************************************************************************************************ ;* pugi::xml_node::hash_value() const * ;************************************************************************************************************************************************************ ;undefined hash_value(xml_node * this) ;this xml_node * RDI MOV RAX,qword ptr [this] SHR RAX,0x6 RET ?? 0Fh Actual src: size_t xml_node::hash_value() const { return static_cast(reinterpret_cast(_root) / sizeof(xml_node_struct)); } Predicted src: const char* name() const override { return name_; } ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined ltks_rsp() SUB RSP,0x8 TEST DIL,DIL JZ LAB_001105b8 MOVZX ESI,DIL LEA RDX,[.rodata:s__00131096] ;= "" CMP DIL,0x15 JA LAB_00110598 MOVSXD RAX,ESI LEA RDX,[.data.rel.ro:mgmt_status] MOV RDX=>.data.rel.ro:mgmt_status,qword ptr [RDX + RAX*0x8] LAB_00110598: LEA RDI,[.rodata:DAT_00133660] ;= 01h XOR EAX,EAX CALL bt_shell_printf ;undefined bt_shell_printf(undefined... XOR EDI,EDI ADD RSP,0x8 JMP bt_shell_noninteractive_quit ;undefined bt_shell_noninteractive_qu... ?? 0Fh ?? 1Fh ?? 80h ?? 00h ?? 00h ?? 00h ?? 00h LAB_001105b8: LEA RDI,[.rodata:s_Long_term_keys_successfully_load_001336a0] ;= "Long term keys successfully loade... XOR EAX,EAX CALL bt_shell_printf ;undefined bt_shell_printf(undefined... XOR EDI,EDI ADD RSP,0x8 JMP bt_shell_noninteractive_quit ;undefined bt_shell_noninteractive_qu... ?? 66h f Actual src: static void ltks_rsp(uint8_t status, uint16_t len, const void *param, void *user_data) { if (status!= 0) error("Load keys failed with status 0x%02x (%s)", status, mgmt_errstr(status)); else print("Long term keys successfully loaded"); bt_shell_noninteractive_quit(EXIT_SUCCESS); } Predicted src: static void status_status_status_status_status (void) { if (status_status_status_status_status) status_status_status_status_status_status_status (status_status_status_status_status); } ============================== Sample 3 ============================== ASM: ;************************************************************************************************************************************************************ ;* idLBCache::Reset() * ;************************************************************************************************************************************************************ ;undefined Reset(idLBCache * this) ;this idLBCache * RDI PUSH R15 LEA R15,[this + 0xcc] PUSH R14 MOV R14,this PUSH R13 PUSH R12 PUSH RBP LEA RBP,[this + 0x4] PUSH RBX SUB RSP,0x8 LAB_0080c80c: MOV R13,qword ptr [RBP + 0x14] MOV dword ptr [RBP],0x0 TEST R13,R13 JZ LAB_0080c85c MOV EAX,dword ptr [RBP + 0x8] TEST EAX,EAX JLE LAB_0080c854 SUB EAX,0x1 LEA RBX,[R13 + 0x10] LEA RAX,[RAX + RAX*0x2] SHL RAX,0x6 LEA R12,[R13 + RAX*0x1 + 0xd0] NOP word ptr [RAX + RAX*0x1] LAB_0080c840: MOV this,RBX ADD RBX,0xc0 CALL idStr::FreeData ;undefined FreeData(idStr * this) CMP RBX,R12 JNZ LAB_0080c840 LAB_0080c854: MOV this,R13 LAB_0080c857: CALL Mem_Free16 ;undefined Mem_Free16(void * param_1) LAB_0080c85c: MOV qword ptr [RBP + 0x14],0x0 ADD RBP,0x28 MOV dword ptr [RBP + -0x24],0x0 MOV dword ptr [RBP + -0x20],0x0 CMP RBP,R15 JNZ LAB_0080c80c MOV qword ptr [R14 + 0xc8],0x0 XOR EAX,EAX MOV dword ptr [R14 + 0xd0],0x0 MOV qword ptr [R14 + 0xe8],0x0 MOV dword ptr [R14 + 0xf0],0x0 MOV qword ptr [R14 + 0xd8],0x0 MOV dword ptr [R14 + 0xe0],0x0 MOV word ptr [R14 + 0xe4],AX ADD RSP,0x8 POP RBX POP RBP POP R12 POP R13 POP R14 POP R15 RET ?? 66h f Actual src: void idLBCache::Reset() { for( int i = 0; i < NUM_ROW_BLOCKS; i++ ) { rowBlocks[i].startIndex = 0; rowBlocks[i].rows.Clear(); } def = NULL; filter = DEFAULT_LEADERBOARD_FILTER; pendingDef = NULL; pendingFilter = DEFAULT_LEADERBOARD_FILTER; rowOffset = 0; requestingRows = false; numRowsInLeaderboard = 0; entryIndex = 0; loadingNewLeaderboard = false; } Predicted src: void CData::Clear() { for (int i = 0; i < m_count; ++i) { m_count[i] = 0; m_count[i] = 0; m_count[i] = 0; m_count[i] = 0; m_count[i] = 0; m_count[i] = 0; m_count[i] = 0; m_count[i] = 0; m_count[i] = 0; m_count[i] = 0; m_count[i] = 0; m_count[i] = 0; m_count[i] = 0; m_count[i] = 0; m_count[i] = 0; } } ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* CFileItemList::Size() const * ;************************************************************************************************************************************************************ ;undefined Size(CFileItemList * this) ;this CFileItemLi... RDI PUSH R12 PUSH RBP LEA RBP,[this + 0x3d8] PUSH RBX MOV RBX,this MOV this,RBP CALL .plt:::pthread_mutex_lock ;int pthread_mutex_lock(pthread_mutex... MOV R12,qword ptr [RBX + 0x338] MOV this,RBP SUB R12,qword ptr [RBX + 0x330] CALL .plt:::pthread_mutex_unlock ;int pthread_mutex_unlock(pthread_mut... SAR R12,0x4 POP RBX POP RBP MOV EAX,R12D POP R12 RET ?? 0Fh ;? -> 00841f0f Actual src: int CFileItemList::Size() const { CSingleLock lock(m_lock); return (int)m_items.size(); } Predicted src: int32_t pthread_mutex_lock() const override { return m_mutex_lock.size(); } ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined go_conf_set_bool() PUSH R12 MOV R12D,EDX PUSH RBP SUB RSP,0x8 CALL .plt:go_conf_get_node ;undefined go_conf_get_node() TEST RAX,RAX JZ LAB_00164620 MOV RDI,qword ptr [RAX + 0x18] MOV RSI,qword ptr [RAX + 0x10] MOV EDX,R12D MOV RBP,RAX CALL .plt:::g_settings_set_boolean ;undefined g_settings_set_boolean() ADD RSP,0x8 MOV RDI,RBP POP RBP POP R12 JMP .plt.got:go_conf_free_node ;undefined go_conf_free_node() ?? 66h f ?? 2Eh . ?? 0Fh ?? 1Fh ?? 84h ?? 00h ?? 00h ?? 00h ?? 00h ?? 00h LAB_00164620: ADD RSP,0x8 POP RBP POP R12 RET ?? 0Fh Actual src: void go_conf_set_bool (GOConfNode *node, gchar const *key, gboolean val) { GOConfNode *real_node = go_conf_get_node (node, key); if (!real_node) { d (g_warning ("Unable to set key '%s'", key)); return; } g_settings_set_boolean (real_node->settings, real_node->key, val); go_conf_free_node (real_node); } Predicted src: static void node_node_set_node (GObject *object, const char *value, gpointer user_data) { node_node_t *node = user_data; if (node == NULL) return; node = node_node_get_node (node->node, value); if (node == NULL) node_set_node (node->node, node->node); }