Чтобы изменить ваши биты, вы можете использовать следующий код.
static int rev(int v){
// swap adjacent pairs of bits
v = ((v >> 2) & 0x3333) | ((v & 0x3333) << 2);
// swap nibbles
v = ((v >> 4) & 0x0f0f) | ((v & 0x0f0f) << 4);
// swap bytes
v = ((v >> 8) & 0x00ff) | ((v & 0x00ff) << 8);
return v;
}
Реализация MIPS состоит из 15 инструкций.
rev: # value to reverse in $01
# uses $02 reg
srli $02, $01, 2
andi $02, $02, 0x3333
andi $01, $01, 0x3333
slli $01, $01, 2
or $01, $01, $02
srli $02, $01, 4
andi $02, $02, 0x0f0f
andi $01, $01, 0x0f0f
slli $01, $01, 4
or $01, $01, $02
srli $02, $01, 8
andi $02, $02, 0xff
andi $01, $01, 0xff
slli $01, $01, 8
or $01, $01, $02
# result in $01
Обратите внимание, что вы можете одновременно обратить 2x16 бит, просто удвоив константы (и даже 4 на 64-битных машинах). Но я не уверен, что это полезно в вашем случае.
просто слепое предположение: попробуйте (myDLL! MyClass *) (0x0012ECE0)
другой вопрос, как убедиться, что это адрес вашего объекта?
в качестве примечания, попробуйте windbg - так проще искать объекты вокруг вашей памяти / стека.
This might not help with the user dump you've got now, but for future user dumps, set the Optimisation setting "Omit frame pointers" to No. This helps with "this" pointers and local vars.