Posted August 24, 201411 yr hello tuts4you, i tried to solve a keygenme and faced a problem. the return value of a function is in example: eax == 00001234.now i want the 3'th byte of it, which is 12. so does anybody know a way to do this? have a nice day!
August 24, 201411 yr The lowest 16 bits of EAX is AX So...AX = 1234AL = 34AH = 12 So just use AH Edited August 24, 201411 yr by NOP
August 24, 201411 yr C void Main() { int IntToParse = 4660; 0x00001234 = EAX = 32 bit integer // adjust this according to which bits you want. remember byte ordering int ParsePlace = 1; // bit shift, multiply, and int Parsed = ((IntToParse >> (8*ParsePlace)) & 0xFF); printf("Parsed = %i\n"); } ----- Output - Parsed = 18 (12h)x86 asm IntToParse = 0x1234 ; mov eax, IntToParse ; int IntToParse = 0x1234 sar eax, 8 ; IntToParse >> 8 and eax, FF ; Result & FF. sometimes this step isnt necessary eax == 12
August 24, 201411 yr x86 asmIntToParse = 0x1234 ;mov eax, IntToParse ; int IntToParse = 0x1234sar eax, 8 ; IntToParse >> 8and eax, FF ; Result & FF. sometimes this step isnt necessaryeax == 12 Hi easiest method for this problem (if we can call it problem !) is :MOVZX EAX,AH Best Regards,h4sh3m
August 24, 201411 yr i understand u (even though in this case a simple "sar eax, 8" works exactly same as "mov eax, ah") but way i showed is standard way to do this in high level language.
August 24, 201411 yr Author So many replys, all are helpfull, thank you very much guys, problem solved!
Create an account or sign in to comment