看RPME的源代码,卡在这个地方了,理解不了
DWORD b=ip+len+(char)ibuf[ip+len-1]; // rel.arg, VA, 1-byte
DWORD d=ip+len+*(long*)&ibuf[ip+len-4]; // ..., 4-byte
其中DWORD ip; // current address (relative)
DWORD len=user_disasm(fp,&ibuf[ip]); // get instruction length
BYTE ibuf[], // input buffer
DWORD nxt=ip+len; // default nxt-entry
DWORD rel=NONE; // default jxx-entry
BYTE o=ibuf[ip]; // opcode, 1 byte
WORD w=*(WORD*)&ibuf[ip]; // opcode, 2 bytes
DWORD b=ip+len+(char)ibuf[ip+len-1]; // rel.arg, VA, 1-byte
DWORD d=ip+len+*(long*)&ibuf[ip+len-4]; // ..., 4-byte
if (((o&0xF0)==0x70)||((o&0xFC)==0xE0)) rel=b; // jcc,jcxz,loop/z/nz
if ((w&0xF0FF)==0x800F) rel=d; // jcc near
if (o==0xE8) rel=d; // call
if (o==0xEB) { rel=b; nxt=NONE; };// jmp short
if (o==0xE9) { rel=d; nxt=NONE; };// jmp
全部的源代码见附件
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)