============================== Sample 1 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined fd_write() PUSH R13 MOV R13,RCX PUSH R12 MOV R12,RDX XOR EDX,EDX PUSH RBP MOV EBP,EDI PUSH RBX MOV RBX,RSI SUB RSP,0x8 CALL .plt:::lseek ;__off_t lseek(int __fd, __off_t __of... CMP RAX,RBX JNZ LAB_00139860 ADD RSP,0x8 MOV RDX,R13 MOV RSI,R12 MOV EDI,EBP POP RBX POP RBP POP R12 POP R13 JMP .plt:::write ;ssize_t write(int __fd, void * __buf... ?? 0Fh ?? 1Fh ?? 84h ?? 00h ?? 00h ?? 00h ?? 00h ?? 00h LAB_00139860: ADD RSP,0x8 MOV RAX,-0x1 POP RBX POP RBP POP R12 POP R13 RET ?? 66h f Actual src: ssize_t fd_write(int fd, off_t offset, const void *src, size_t size) { if (lseek(fd, offset, SEEK_SET)!= offset) return -1; return write(fd, src, size); } Predicted src: static ssize_t write(int fd, void *buf, size_t count) { ssize_t ret; ret = write(fd, buf, count); if (ret == -1) return ret; return write(fd, buf, count); } ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* SBMap::getLinearValue(unsigned int, unsigned int) * ;************************************************************************************************************************************************************ ;undefined getLinearValue(SBMap * this, uint param_1, uint param_2) ;this SBMap * RDI ;param_1 uint ESI ;param_2 uint EDX ;local_10 undefined8 -10 ;local_14 undefined4 -14 PUSH RBX MOV param_1,param_1 SUB RSP,0x10 MOV RAX,qword ptr FS:[0x28] MOV qword ptr [RSP + local_10+0x18],RAX XOR EAX,EAX MOV RAX,qword ptr [this + 0x68] MOV this,qword ptr [RAX + param_1*0x8] MOV R11D,dword ptr [this + 0x50] TEST R11D,R11D JNZ LAB_0022c318 MOV R8D,param_2 CMP param_2,dword ptr [this + 0x18] JNC LAB_0022c2f8 MOVZX EBX,byte ptr [this + 0x12] CMP BL,0x2 JA LAB_0022c2f8 LEA param_2=>local_14,[RSP + 0x4] MOV param_1,R8D CALL SBMapItem::getValue ;undefined getValue(SBMapItem * this,... MOV param_2,0x1 MOV ECX,EBX SHL param_2,CL CMP param_2,dword ptr [RSP + local_14+0x18] JZ LAB_0022c320 NOP dword ptr [RAX] LAB_0022c2f8: MOV RAX,qword ptr [RSP + local_10+0x18] SUB RAX,qword ptr FS:[0x28] JNZ LAB_0022c33d ADD RSP,0x10 MOV EAX,R11D POP RBX RET ?? 0Fh ?? 1Fh ?? 80h ?? 00h ?? 00h ?? 00h ?? 00h LAB_0022c318: XOR R11D,R11D JMP LAB_0022c2f8 ?? 0Fh ?? 1Fh ?? 00h LAB_0022c320: ADD param_2,RAX NOP dword ptr [RAX + RAX*0x1] LAB_0022c328: MOVZX ECX,byte ptr [RAX] SHL R11D,0x8 ADD RAX,0x1 ADD R11D,ECX CMP RAX,param_2 JNZ LAB_0022c328 JMP LAB_0022c2f8 LAB_0022c33d: CALL .plt:::__stack_chk_fail ;undefined __stack_chk_fail() NOP dword ptr CS:[RAX + RAX*0x1] Actual src: SS_UCS4 SBMap::getLinearValue (unsigned int _index, unsigned int position) { return maps[_index]->getLinearValue(position); } Predicted src: uint32_t getValueValue(uint32_t index, uint32_t index) { uint32_t i; for (i = 0; i < index; i++) { if (index[i] == index) { return index[i]; } } return 0; } ============================== Sample 3 ============================== ASM: ;************************************************************************************************************************************************************ ;* js::frontend::ElemOpEmitter::prepareForRhs() * ;************************************************************************************************************************************************************ ;undefined prepareForRhs(ElemOpEmitter * this) ;this ElemOpEmitt... RDI MOV EAX,dword ptr [this + 0x8] SUB EAX,0x8 CMP EAX,0x1 JA LAB_00687ad2 MOV EAX,dword ptr [this + 0xc] TEST EAX,EAX JZ LAB_00687ae0 LAB_00687ad2: MOV EAX,0x1 RET ?? 0Fh ;? -> 00841f0f ?? 1Fh ?? 84h ?? 00h ?? 00h ?? 00h ?? 00h ?? 00h LAB_00687ae0: MOV this,qword ptr [this] JMP js::frontend::BytecodeEmitter::emitSuperBase ;undefined emitSuperBase(BytecodeEmit... ?? 0Fh ;? -> 00841f0f Actual src: bool ElemOpEmitter::prepareForRhs() { MOZ_ASSERT(isSimpleAssignment() || isPropInit() || isCompoundAssignment()); MOZ_ASSERT_IF(isSimpleAssignment() || isPropInit(), state_ == State::Key); MOZ_ASSERT_IF(isCompoundAssignment(), state_ == State::Get); if (isSimpleAssignment() || isPropInit()) { // For CompoundAssignment, SuperBase is already emitted by emitGet. if (isSuper()) { if (!bce_->emitSuperBase()) { // [stack] THIS KEY SUPERBASE return false; } } } #ifdef DEBUG state_ = State::Rhs; #endif return true; } Predicted src: void KisBaseBase::emit() { if (m_ptr) { m_ptr->emit(); } } ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined dvb_channel_list_real_foreach() PUSH R13 MOV R13,RDX PUSH R12 MOV R12,RSI PUSH RBP MOV RDI,qword ptr [RDI + 0x20] CALL .plt:::gee_iterable_iterator ;undefined gee_iterable_iterator() MOV RSI,R12 MOV RDX,R13 MOV RDI,RAX MOV RBP,RAX CALL .plt:::gee_traversable_foreach ;undefined gee_traversable_foreach() MOV R12D,EAX TEST RBP,RBP JZ LAB_00151b05 MOV RDI,RBP CALL .plt.got:::g_object_unref ;undefined g_object_unref() LAB_00151b05: MOV EAX,R12D POP RBP POP R12 POP R13 RET ?? 66h f Actual src: static gboolean dvb_channel_list_real_foreach (GeeTraversable* base, GeeForallFunc f, void* f_target) { DVBChannelList * self; gboolean result = FALSE; GeeHashMap* _tmp0_ = NULL; GeeIterator* _tmp1_ = NULL; GeeIterator* _tmp2_ = NULL; GeeForallFunc _tmp3_ = NULL; void* _tmp3__target = NULL; gboolean _tmp4_ = FALSE; gboolean _tmp5_ = FALSE; self = (DVBChannelList*) base; _tmp0_ = self->channels; _tmp1_ = gee_iterable_iterator ((GeeIterable*) _tmp0_); _tmp2_ = _tmp1_; _tmp3_ = f; _tmp3__target = f_target; _tmp4_ = gee_traversable_foreach ((GeeTraversable*) _tmp2_, _tmp3_, _tmp3__target); _tmp5_ = _tmp4_; _g_object_unref0 (_tmp2_); result = _tmp5_; return result; } Predicted src: static gboolean gee_iterator_real_foreach (gpointer user_data) { GeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGeeGe ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined _vala_docky_clippy_preferences_set_property() PUSH R14 MOV R14,RDX PUSH R13 PUSH R12 MOV R12,RCX PUSH RBP MOV RBP,RDI PUSH RBX MOV EBX,ESI CALL .plt:docky_clippy_preferences_get_type ;undefined docky_clippy_preferences_g... MOV RDI,RBP MOV RSI,RAX CALL .plt:::g_type_check_instance_cast ;undefined g_type_check_instance_cast() MOV R13,RAX CMP EBX,0x1 JZ LAB_00103990 CMP EBX,0x2 JZ LAB_001039b0 MOV RAX,qword ptr [RBP] MOV RDI,qword ptr [RAX] CALL .plt:::g_type_name ;undefined g_type_name() MOV RBP,RAX MOV RAX,qword ptr [R12] MOV RDI,qword ptr [RAX] CALL .plt:::g_type_name ;undefined g_type_name() PUSH RBP LEA R9,[.rodata:s_property_00104438] ;= "property" XOR EDI,EDI PUSH RAX MOV R8D,0x115 XOR EAX,EAX LEA RCX,[.rodata:s_ClippyPreferences.c_00104441] ;= "ClippyPreferences.c" PUSH qword ptr [R12 + 0x8] LEA RDX,[.rodata:s_%s:%d:_invalid_%s_id_%u_for_"%s"_001043a8] ;= "%s:%d: invalid %s id %u for \"%s\... MOV ESI,0x10 PUSH RBX CALL .plt:::g_log ;undefined g_log() ADD RSP,0x20 POP RBX POP RBP POP R12 POP R13 POP R14 RET ?? 0Fh ?? 1Fh ?? 00h LAB_00103990: MOV RDI,R14 CALL .plt:::g_value_get_uint ;undefined g_value_get_uint() POP RBX MOV RDI,R13 POP RBP MOV ESI,EAX POP R12 POP R13 POP R14 JMP .plt:docky_clippy_preferences_set_MaxEntries ;undefined docky_clippy_preferences_s... ?? 66h f ?? 0Fh ?? 1Fh ?? 44h D ?? 00h ?? 00h LAB_001039b0: MOV RDI,R14 CALL .plt:::g_value_get_boolean ;undefined g_value_get_boolean() POP RBX MOV RDI,R13 POP RBP MOV ESI,EAX POP R12 POP R13 POP R14 JMP .plt:LAB_00102160 ?? 66h f Actual src: static void _vala_docky_clippy_preferences_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) { DockyClippyPreferences * self; self = G_TYPE_CHECK_INSTANCE_CAST (object, DOCKY_TYPE_CLIPPY_PREFERENCES, DockyClippyPreferences); switch (property_id) { case DOCKY_CLIPPY_PREFERENCES_MAX_ENTRIES_PROPERTY: docky_clippy_preferences_set_MaxEntries (self, g_value_get_uint (value)); break; case DOCKY_CLIPPY_PREFERENCES_TRACK_MOUSE_SELECTIONS_PROPERTY: docky_clippy_preferences_set_TrackMouseSelections (self, g_value_get_boolean (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } Predicted src: static void _vala_dock_dock_dock_dock_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) { dockdockdock * self; self = G_TYPE_CHECK_INSTANCE_CAST (object, G_TYPE_CHECK_INSTANCE_CAST (object, TYPE_dockdock_dock_dock_TYPE_dock, TYPE_dockdockdock); switch (property_id) { case PROP_SIZE_PROPERTY: dock_dock_dock_set_property (self, g_value_get_boolean (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); }