[asm] Kod niezależny od adresu "początkowego"

0

Witam.
Muszę napisać w asm taki kod który po załadowaniu do nieokreślonego miejsca w pamięci bedzie działał.
np. przy skoku typu
jmp short etykieta
nie jest zapisywany adres etykiety tylko przesunięcie względem miejsca z którego się skacze.
Więc skok bedzie poprawny.
Problem pojawia się gdy chcę załadować adres do rejestru lub Od razu na stos.
Push etykieta
Czy można jakoś obliczyć adres etykiety?
Myślałem żeby obliczyć to za pomocą rejestru eip ale nie moge go odczytac.

Program jest na windowsa.

0

technika stara jak świat - delta

        pushad
        call    _base
_base:
        pop     ebp
        mov     eax, [ebp+jakies_dane-_base]
        lea     edx, [ebp+jakies_cos-_base]
        mov     [ebp+costam], eax
        mov     [ebp+costam+4], edx
        popad
        retn

jakies_dane     dd 0x29a
jakies_cos      dd -1
costam          dd 0, 0

Dziwię się, że sam na to nie wpadłeś... przecież call pozwala pobrać eip a przesunięcie jednej etykiety względem drugiej jest stałe. Większość ludzi sama do delty dochodzi. Technika bardzo często stosowana w wirusach, packerach, wszelakim wstrzykiwanym kodzie... są też inne metody ale to już bardziej skomplikowane.

0

Y, a można spytać skąd ta nazwa - delta? No bo sposób i owszem znany, ale z takim 'kryptonimem' po raz pierwszy się spotykam :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1