FastLife Posted August 24, 2014 Posted August 24, 2014 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!
NOP Posted August 24, 2014 Posted August 24, 2014 (edited) The lowest 16 bits of EAX is AX So...AX = 1234AL = 34AH = 12 So just use AH Edited August 24, 2014 by NOP 2
simple Posted August 24, 2014 Posted August 24, 2014 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 1
h4sh3m Posted August 24, 2014 Posted August 24, 2014 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 1
simple Posted August 24, 2014 Posted August 24, 2014 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. 1
FastLife Posted August 24, 2014 Author Posted August 24, 2014 So many replys, all are helpfull, thank you very much guys, problem solved!
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now