Originally Posted by
siruxx
how can i find this description list with ollydbg? i dont use ida
but thx anyway

I do it this way
Code:
//sizeof = 0x28
struct AttributeDesc
{
DWORD id; // 0x000
DWORD DefaultVal; // 0x004
DWORD unk2; // 0x008
DWORD unk3; // 0x00C
DWORD Type; // 0x010 0 = float, 1 = int
void* Formula1; // 0x014
void* Formula2; // 0x018
char* Name; // 0x01C
void* unk5; // 0x020
DWORD unk6; // 0x024
};
void CProcess::EnumAttribList()
{
DWORD dwAddr = 0x1520518;
AttributeDesc desk;
char sszName[64];
for(int i = 0; ;i++)
{
if(CProcess::Instance().Core.Read(dwAddr + i*sizeof(AttributeDesc), sizeof(desk), &desk) != ERROR_SUCCESS ||
desk.Name == NULL || desk.Name == (char*)INVALID_VALUE)
{
break;
}
CProcess::Instance().Core.Read((DWORD)desk.Name, sizeof(sszName), &sszName);
ds_utils::CDSString strName, strType;
if(desk.Type == 0)
strType = L"float";
else if(desk.Type == 1)
strType = L"int";
else
strType = L"unknown";
strName.format(L"%ws = 0x%x, // %ws\r\n", ds_utils::CDSString(sszName).data(), desk.id, strType.data());
OutputDebugStringW(strName.data());
}
}
dwAddr can be found using this:
Code:
AttributeDesc* AttributeDescriptionList = (AttributeDesc*)0x1557518; // 9950
// pattern:
// .text:008584D8 loc_8584D8: ; CODE XREF: StringToAttrib+4D
// .text:008584D8 8D 04 BF lea eax, [edi+edi*4]
// .text:008584DB 8B 04 C5 18 75 55 01 mov eax, AttributeList.id[eax*8]
// .text:008584E2 5F pop edi
// .text:008584E3 5E pop esi
All this stuff actually was posted long ago here Blizzhackers • View topic - Diablo III Offsets, Globals, Funcs, Structs, Classes, etc.