Hi BinUtils, It looks like I may have found a bug in the gcc assembler, where the wrong op codes are being generated. For all destination registers, the fixed source value gets changed. For example: add eax, dword ptr ds:[0x22222222] Encodes to: 03 04 25 26 22 22 22 Should be: 03 04 25 22 22 22 22 And, add rax, qword ptr ds:[0x33333333] Encodes to: 48 03 04 25 3B 33 33 33 Should be: 48 03 04 25 33 33 33 33 The change in the address is the size of the data element (dword[4] or qword[8]). As if it was looking at array_element[1] instead of array_element[0]. The change in the address is also not the size of the instruction in the case of dword. Thanks, Tim Reago