linux x86_64絶対アドレス指定に関するトピックが見つかりました: Absolute addressing for runtime code replacement in x86_64。絶対アドレス指定はlinuxではサポートされていないと言われました。Windows x64用の絶対呼び出し(0xFF 0x15)アドレッシング
Windows x64では、絶対呼び出しに近いものはありますか? Windows用の
は、関数のアドレスは、このように絶対的なコール(0xFFで0x15の)近くから取得することができますX86:
unsigned char call_nearAbsolute[2] = {0xFF, 0x15};
if(memcmp(bytes, call_nearAbsolute, sizeof(call_nearAbsolute)) == 0) {
{
unsigned char offset[] = {
*(bytes + 0x5),
*(bytes + 0x4),
*(bytes + 0x3),
*(bytes + 0x2)
};
PDWORD_PTR absolute_addr =
(PDWORD_PTR)(((offset[0] & 0xFF) << 24) |
((offset[1] & 0xFF) << 16) |
((offset[2] & 0xFF) << 8) |
offset[3] & 0xFF);
}
それはx64のためにサポートされている場合は、どのように手続きアドレスを正しく取得しますか?
ff 15 xx xx xx xxは間接呼び出しで、 'call qword ptr [offset]'です。* offset *は命令ポインタからの32ビット符号付きオフセットです。アドレス指定された位置の8バイトには、呼び出す関数の実際のアドレスが格納されます。 –
はx64でも8バイト使用されますか? – ChatCloud
Ermでは、アドレスは64ビットモードでは8バイトです。 –