- Joined
- Sep 24, 2006
- Messages
- 54
- Reaction score
- 13
I'm not looking for a direct answer but more of a good place to start learning, however direct answers are always nice
I am trying to change a structure in IDA, I'm very newbie when it comes to C & assembly but I'm learning. I know you're not supposed to start this way but I'm a bit forced.
I have this structure.
struct ADDON_GROUP_ESSENCE {
unsigned int id;
wchar_t name[32];
wchar_t prefix[16];
wchar_t suffix[16];
int desc_text;
int desc_text_col;
int type;
int addon_ids[8];
}
the new version has addon_ids[16] instead of 8 & the size from 176 to 208. What exactly should I be looking for?
Thanks for any help in advance!
I am trying to change a structure in IDA, I'm very newbie when it comes to C & assembly but I'm learning. I know you're not supposed to start this way but I'm a bit forced.
I have this structure.
struct ADDON_GROUP_ESSENCE {
unsigned int id;
wchar_t name[32];
wchar_t prefix[16];
wchar_t suffix[16];
int desc_text;
int desc_text_col;
int type;
int addon_ids[8];
}
the new version has addon_ids[16] instead of 8 & the size from 176 to 208. What exactly should I be looking for?
Code:
.text:081FD4A8 ; abase::vector<ADDON_GROUP_ESSENCE, abase::default_alloc>::push_back(ADDON_GROUP_ESSENCE const&)
.text:081FD4A8 public _ZN5abase6vectorI19ADDON_GROUP_ESSENCENS_13default_allocEE9push_backERKS1_ ; weak
.text:081FD4A8 _ZN5abase6vectorI19ADDON_GROUP_ESSENCENS_13default_allocEE9push_backERKS1_ proc near
.text:081FD4A8 ; CODE XREF: elementdataman::array<ADDON_GROUP_ESSENCE>::load(_IO_FILE *)+D4p
.text:081FD4A8 ; elementdataman::array<ADDON_GROUP_ESSENCE>::push_back(ADDON_GROUP_ESSENCE const&)+Fp
.text:081FD4A8
.text:081FD4A8 var_28 = dword ptr -28h
.text:081FD4A8 var_24 = dword ptr -24h
.text:081FD4A8 var_20 = dword ptr -20h
.text:081FD4A8 var_1C = dword ptr -1Ch
.text:081FD4A8 var_18 = dword ptr -18h
.text:081FD4A8 var_14 = dword ptr -14h
.text:081FD4A8 var_10 = dword ptr -10h
.text:081FD4A8 arg_0 = dword ptr 8
.text:081FD4A8 arg_4 = dword ptr 0Ch
.text:081FD4A8
.text:081FD4A8 push ebp
.text:081FD4A9 mov ebp, esp
.text:081FD4AB push edi
.text:081FD4AC push esi
.text:081FD4AD push ebx
.text:081FD4AE sub esp, 1Ch
.text:081FD4B1 mov eax, [ebp+arg_0]
.text:081FD4B4 mov edx, [ebp+arg_0]
.text:081FD4B7 mov eax, [eax+0Ch]
.text:081FD4BA cmp eax, [edx+8]
.text:081FD4BD jnz loc_81FD5E7
.text:081FD4C3 sub esp, 4
.text:081FD4C6 lea eax, [ebp+var_20]
.text:081FD4C9 push eax
.text:081FD4CA mov eax, [ebp+arg_0]
.text:081FD4CD mov eax, [eax+0Ch]
.text:081FD4D0 inc eax
.text:081FD4D1 push eax
.text:081FD4D2 push [ebp+arg_0]
.text:081FD4D5 call _ZN5abase6vectorI19ADDON_GROUP_ESSENCENS_13default_allocEE15_M_allocate_newEjRj ; abase::vector<ADDON_GROUP_ESSENCE,abase::default_alloc>::_M_allocate_new(uint,uint &)
.text:081FD4DA add esp, 10h
.text:081FD4DD mov [ebp+var_14], eax
.text:081FD4E0 cmp [ebp+var_14], 0
.text:081FD4E4 jnz short loc_81FD506
.text:081FD4E6 sub esp, 4
.text:081FD4E9 push 0C6h
.text:081FD4EE push offset aExportZhang_59 ; "/export/zhanglidong/chibi/sgame/include"...
.text:081FD4F3 push offset aNewdata_26 ; "newdata"
.text:081FD4F8 call ASSERT_FAIL
.text:081FD4FD add esp, 10h
.text:081FD500 mov dword ptr [eax], 0
.text:081FD506
.text:081FD506 loc_81FD506: ; CODE XREF: abase::vector<ADDON_GROUP_ESSENCE,abase::default_alloc>::push_back(ADDON_GROUP_ESSENCE const&)+3Cj
.text:081FD506 mov eax, [ebp+var_14]
.text:081FD509 mov [ebp+var_18], eax
.text:081FD50C mov eax, [ebp+arg_0]
.text:081FD50F mov eax, [eax]
.text:081FD511 mov [ebp+var_1C], eax
.text:081FD514 mov [ebp+var_10], 0
.text:081FD51B
.text:081FD51B loc_81FD51B: ; CODE XREF: abase::vector<ADDON_GROUP_ESSENCE,abase::default_alloc>::push_back(ADDON_GROUP_ESSENCE const&)+C8j
.text:081FD51B mov edx, [ebp+arg_0]
.text:081FD51E mov eax, [ebp+var_10]
.text:081FD521 cmp eax, [edx+0Ch]
.text:081FD524 jb short loc_81FD528
.text:081FD526 jmp short loc_81FD572
.text:081FD528 ; ---------------------------------------------------------------------------
.text:081FD528
.text:081FD528 loc_81FD528: ; CODE XREF: abase::vector<ADDON_GROUP_ESSENCE,abase::default_alloc>::push_back(ADDON_GROUP_ESSENCE const&)+7Cj
.text:081FD528 sub esp, 8
.text:081FD52B mov eax, [ebp+var_18]
.text:081FD52E push eax
.text:081FD52F lea eax, [ebp+var_18]
.text:081FD532 add dword ptr [eax], 0B0h
.text:081FD538 push 0B0h
.text:081FD53D call _ZnwjPv ; operator new(uint,void *)
.text:081FD542 add esp, 10h
.text:081FD545 mov [ebp+var_24], eax
.text:081FD548 cmp [ebp+var_24], 0
.text:081FD54C jz short loc_81FD56B
.text:081FD54E mov eax, [ebp+var_1C]
.text:081FD551 mov edx, eax
.text:081FD553 lea eax, [ebp+var_1C]
.text:081FD556 add dword ptr [eax], 0B0h
.text:081FD55C mov edi, [ebp+var_24]
.text:081FD55F mov esi, edx
.text:081FD561 cld
.text:081FD562 mov eax, 2Ch
.text:081FD567 mov ecx, eax
.text:081FD569 rep movsd
.text:081FD56B
.text:081FD56B loc_81FD56B: ; CODE XREF: abase::vector<ADDON_GROUP_ESSENCE,abase::default_alloc>::push_back(ADDON_GROUP_ESSENCE const&)+A4j
.text:081FD56B lea eax, [ebp+var_10]
.text:081FD56E inc dword ptr [eax]
.text:081FD570 jmp short loc_81FD51B
.text:081FD572 ; ---------------------------------------------------------------------------
.text:081FD572
.text:081FD572 loc_81FD572: ; CODE XREF: abase::vector<ADDON_GROUP_ESSENCE,abase::default_alloc>::push_back(ADDON_GROUP_ESSENCE const&)+7Ej
.text:081FD572 mov eax, [ebp+arg_0]
.text:081FD575 mov eax, [eax]
.text:081FD577 mov [ebp+var_1C], eax
.text:081FD57A mov [ebp+var_10], 0
.text:081FD581
.text:081FD581 loc_81FD581: ; CODE XREF: abase::vector<ADDON_GROUP_ESSENCE,abase::default_alloc>::push_back(ADDON_GROUP_ESSENCE const&)+F4j
.text:081FD581 mov edx, [ebp+arg_0]
.text:081FD584 mov eax, [ebp+var_10]
.text:081FD587 cmp eax, [edx+0Ch]
.text:081FD58A jb short loc_81FD58E
.text:081FD58C jmp short loc_81FD59E
.text:081FD58E ; ---------------------------------------------------------------------------
.text:081FD58E
.text:081FD58E loc_81FD58E: ; CODE XREF: abase::vector<ADDON_GROUP_ESSENCE,abase::default_alloc>::push_back(ADDON_GROUP_ESSENCE const&)+E2j
.text:081FD58E lea eax, [ebp+var_1C]
.text:081FD591 add dword ptr [eax], 0B0h
.text:081FD597 lea eax, [ebp+var_10]
.text:081FD59A inc dword ptr [eax]
.text:081FD59C jmp short loc_81FD581
.text:081FD59E ; ---------------------------------------------------------------------------
.text:081FD59E
.text:081FD59E loc_81FD59E: ; CODE XREF: abase::vector<ADDON_GROUP_ESSENCE,abase::default_alloc>::push_back(ADDON_GROUP_ESSENCE const&)+E4j
.text:081FD59E sub esp, 4
.text:081FD5A1 mov eax, [ebp+arg_0]
.text:081FD5A4 push dword ptr [eax+8] ; int
.text:081FD5A7 mov eax, [ebp+arg_0]
.text:081FD5AA push dword ptr [eax] ; void *
.text:081FD5AC push [ebp+arg_0] ; int
.text:081FD5AF call _ZN5abase6vectorI19ADDON_GROUP_ESSENCENS_13default_allocEE13_M_deallocateEPS1_j ; abase::vector<ADDON_GROUP_ESSENCE,abase::default_alloc>::_M_deallocate(ADDON_GROUP_ESSENCE*,uint)
.text:081FD5B4 add esp, 10h
.text:081FD5B7 mov edx, [ebp+arg_0]
.text:081FD5BA mov eax, [ebp+var_20]
.text:081FD5BD mov [edx+8], eax
.text:081FD5C0 mov edx, [ebp+arg_0]
.text:081FD5C3 mov eax, [ebp+var_14]
.text:081FD5C6 mov [edx], eax
.text:081FD5C8 mov ebx, [ebp+arg_0]
.text:081FD5CB mov ecx, [ebp+arg_0]
.text:081FD5CE mov eax, [ebp+arg_0]
.text:081FD5D1 mov edx, [eax+0Ch]
.text:081FD5D4 mov eax, edx
.text:081FD5D6 shl eax, 2
.text:081FD5D9 add eax, edx
.text:081FD5DB shl eax, 1
.text:081FD5DD add eax, edx
.text:081FD5DF shl eax, 4
.text:081FD5E2 add eax, [ecx]
.text:081FD5E4 mov [ebx+4], eax
.text:081FD5E7
.text:081FD5E7 loc_81FD5E7: ; CODE XREF: abase::vector<ADDON_GROUP_ESSENCE,abase::default_alloc>::push_back(ADDON_GROUP_ESSENCE const&)+15j
.text:081FD5E7 sub esp, 8
.text:081FD5EA mov eax, [ebp+arg_0]
.text:081FD5ED push dword ptr [eax+4]
.text:081FD5F0 push 0B0h
.text:081FD5F5 call _ZnwjPv ; operator new(uint,void *)
.text:081FD5FA add esp, 10h
.text:081FD5FD mov [ebp+var_28], eax
.text:081FD600 cmp [ebp+var_28], 0
.text:081FD604 jz short loc_81FD618
.text:081FD606 mov eax, [ebp+arg_4]
.text:081FD609 mov edi, [ebp+var_28]
.text:081FD60C mov esi, eax
.text:081FD60E cld
.text:081FD60F mov eax, 2Ch
.text:081FD614 mov ecx, eax
.text:081FD616 rep movsd
.text:081FD618
.text:081FD618 loc_81FD618: ; CODE XREF: abase::vector<ADDON_GROUP_ESSENCE,abase::default_alloc>::push_back(ADDON_GROUP_ESSENCE const&)+15Cj
.text:081FD618 mov eax, [ebp+arg_0]
.text:081FD61B inc dword ptr [eax+0Ch]
.text:081FD61E mov eax, [ebp+arg_0]
.text:081FD621 add dword ptr [eax+4], 0B0h
.text:081FD628 lea esp, [ebp-0Ch]
.text:081FD62B pop ebx
.text:081FD62C pop esi
.text:081FD62D pop edi
.text:081FD62E leave
.text:081FD62F retn
.text:081FD62F _ZN5abase6vectorI19ADDON_GROUP_ESSENCENS_13default_allocEE9push_backERKS1_ endp
Code:
.text:081D22FA ; elementdataman::add_structure(unsigned int, ADDON_GROUP_ESSENCE &).text:081D22FA public _ZN14elementdataman13add_structureEjR19ADDON_GROUP_ESSENCE
.text:081D22FA _ZN14elementdataman13add_structureEjR19ADDON_GROUP_ESSENCE proc near
.text:081D22FA
.text:081D22FA var_4 = dword ptr -4
.text:081D22FA arg_0 = dword ptr 8
.text:081D22FA arg_4 = dword ptr 0Ch
.text:081D22FA arg_8 = dword ptr 10h
.text:081D22FA
.text:081D22FA push ebp
.text:081D22FB mov ebp, esp
.text:081D22FD sub esp, 8
.text:081D2300 sub esp, 8
.text:081D2303 push [ebp+arg_8]
.text:081D2306 mov eax, [ebp+arg_0]
.text:081D2309 add eax, 4E0h
.text:081D230E push eax
.text:081D230F call _ZN14elementdataman5arrayI19ADDON_GROUP_ESSENCEE9push_backERKS1_ ; elementdataman::array<ADDON_GROUP_ESSENCE>::push_back(ADDON_GROUP_ESSENCE const&)
.text:081D2314 add esp, 10h
.text:081D2317 sub esp, 0Ch
.text:081D231A mov eax, [ebp+arg_0]
.text:081D231D add eax, 4E0h
.text:081D2322 push eax
.text:081D2323 call _ZN14elementdataman5arrayI19ADDON_GROUP_ESSENCEE4sizeEv ; elementdataman::array<ADDON_GROUP_ESSENCE>::size(void)
.text:081D2328 add esp, 10h
.text:081D232B dec eax
.text:081D232C mov [ebp+var_4], eax
.text:081D232F sub esp, 8
.text:081D2332 push 0
.text:081D2334 mov eax, [ebp+arg_0]
.text:081D2337 add eax, 4E0h
.text:081D233C push eax
.text:081D233D call _ZN14elementdataman5arrayI19ADDON_GROUP_ESSENCEEixEj ; elementdataman::array<ADDON_GROUP_ESSENCE>::operator[](uint)
.text:081D2342 add esp, 8
.text:081D2345 push eax
.text:081D2346 push [ebp+var_4]
.text:081D2349 push 4Fh
.text:081D234B push [ebp+arg_4]
.text:081D234E push 0
.text:081D2350 push [ebp+arg_0]
.text:081D2353 call _ZN14elementdataman12add_id_indexE8ID_SPACEj9DATA_TYPEjPv ; elementdataman::add_id_index(ID_SPACE,uint,DATA_TYPE,uint,void *)
.text:081D2358 add esp, 20h
.text:081D235B leave
.text:081D235C retn
.text:081D235C _ZN14elementdataman13add_structureEjR19ADDON_GROUP_ESSENCE endp
Code:
.text:081DFDDA ; elementdataman::array<ADDON_GROUP_ESSENCE>::size(void).text:081DFDDA public _ZN14elementdataman5arrayI19ADDON_GROUP_ESSENCEE4sizeEv ; weak
.text:081DFDDA _ZN14elementdataman5arrayI19ADDON_GROUP_ESSENCEE4sizeEv proc near
.text:081DFDDA ; CODE XREF: elementdataman::add_structure(uint,ADDON_GROUP_ESSENCE &)+29p
.text:081DFDDA ; elementdataman::setup_hash_map(void)+5519p
.text:081DFDDA
.text:081DFDDA arg_0 = dword ptr 8
.text:081DFDDA
.text:081DFDDA push ebp
.text:081DFDDB mov ebp, esp
.text:081DFDDD sub esp, 8
.text:081DFDE0 sub esp, 0Ch
.text:081DFDE3 push [ebp+arg_0]
.text:081DFDE6 call _ZNK5abase6vectorI19ADDON_GROUP_ESSENCENS_13default_allocEE4sizeEv ; abase::vector<ADDON_GROUP_ESSENCE,abase::default_alloc>::size(void)
.text:081DFDEB add esp, 10h
.text:081DFDEE leave
.text:081DFDEF retn
.text:081DFDEF _ZN14elementdataman5arrayI19ADDON_GROUP_ESSENCEE4sizeEv endp
.text:081DFDEF
.text:081DFDF0
.text:081DFDF0 ; =============== S U B R O U T I N E =======================================
.text:081DFDF0
.text:081DFDF0 ; Attributes: bp-based frame
.text:081DFDF0
.text:081DFDF0 ; elementdataman::array<ADDON_GROUP_ESSENCE>::operator[](unsigned int)
.text:081DFDF0 public _ZN14elementdataman5arrayI19ADDON_GROUP_ESSENCEEixEj ; weak
.text:081DFDF0 _ZN14elementdataman5arrayI19ADDON_GROUP_ESSENCEEixEj proc near
.text:081DFDF0 ; CODE XREF: elementdataman::add_structure(uint,ADDON_GROUP_ESSENCE &)+43p
.text:081DFDF0 ; elementdataman::setup_hash_map(void)+5551p ...
.text:081DFDF0
.text:081DFDF0 arg_0 = dword ptr 8
.text:081DFDF0 arg_4 = dword ptr 0Ch
.text:081DFDF0
.text:081DFDF0 push ebp
.text:081DFDF1 mov ebp, esp
.text:081DFDF3 sub esp, 8
.text:081DFDF6 sub esp, 8
.text:081DFDF9 push [ebp+arg_4]
.text:081DFDFC push [ebp+arg_0]
.text:081DFDFF call _ZN5abase6vectorI19ADDON_GROUP_ESSENCENS_13default_allocEEixEj ; abase::vector<ADDON_GROUP_ESSENCE,abase::default_alloc>::operator[](uint)
.text:081DFE04 add esp, 10h
.text:081DFE07 leave
.text:081DFE08 retn
.text:081DFE08 _ZN14elementdataman5arrayI19ADDON_GROUP_ESSENCEEixEj endp
Code:
.text:081CD04E loc_81CD04E: ; CODE XREF: elementdataman::~elementdataman()+A7Bj.text:081CD04E mov ebx, [ebp+var_10]
.text:081CD051 sub esp, 0Ch
.text:081CD054 mov eax, [ebp+arg_0]
.text:081CD057 add eax, 4E0h
.text:081CD05C push eax
.text:081CD05D call _ZN14elementdataman5arrayI19ADDON_GROUP_ESSENCEED1Ev ; elementdataman::array<ADDON_GROUP_ESSENCE>::~array()
.text:081CD062 add esp, 10h
.text:081CD065 mov [ebp+var_10], ebx
.text:081CD068 jmp short loc_81CD083
.text:081CD06A ; ---------------------------------------------------------------------------
.text:081CD06A
.text:081CD06A loc_81CD06A: ; CODE XREF: elementdataman::~elementdataman()+A91j
.text:081CD06A sub esp, 0Ch
.text:081CD06D mov eax, [ebp+arg_0]
.text:081CD070 add eax, 4E0h
.text:081CD075 push eax
.text:081CD076 call _ZN14elementdataman5arrayI19ADDON_GROUP_ESSENCEED1Ev ; elementdataman::array<ADDON_GROUP_ESSENCE>::~array()
.text:081CD07B add esp, 10h
.text:081CD07E jmp short loc_81CD09F
Thanks for any help in advance!
Last edited: