kam1 - записи на клочке
Multiarch picode 
12th-Oct-2015 09:07 pm
Озадачился было созданием многоразрядного pic кода, работающего по-разному в зависимости от разрядности (диспетчеризация). Поиск дал вариант от Arkon и способ от товарища PROFi, кажется. Сорцы были безжалостно рипнуты, и объединены. Получился код, выполняющийся в 16, 32, 64 битном режимах по-разному.

loc_entry:
use32
    xor eax, eax
    inc eax
    nop
    jz x86_64_code

; 16 bit or 32 bit code
x86_16_32_code:
use16
    mov ax, 0x29a
    jmp short x86_16_code 
    jmp x86_32_code
x86_16_code:
use16
    ret

x86_32_code:
use32
    nop
    ret


; x64 code
x86_64_code:
use64
    nop
    ret

Пояснения интересных мест:

inc eax
; выполняется подобно в 16, 32 битном коде. В 64 битном байт 0x40 идёт как префикс к следующему нопу, и трактуется с ним как одна команда. Поэтому, zf будет взведён только для x64.

mov ax, 0x29a
;в 16 битном выполняется как есть. В 32 битном вторая команда поглощается первой, и будет здесь mov eax, 0x2eb029a вместо их двух, поэтому перехода на 16 битный код нет, а есть дальше только на 32 битный.

В данном коде нет нулей, так что может использоваться как шеллкод.
This page was loaded Jun 30th 2024, 3:19 am GMT.