Jump to content

CSm1n

Members
  • Posts

    5
  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

CSm1n's Achievements

Newbie

Newbie (1/14)

12

Reputation

  1. CSm1n

    [ASM] Noob

    Ar fi o idee sa modific manual executabilul, insa opcodeul cu dereferentiere este mai mare cu un byte, iar asta implica sa modific si instructiunile care urmeaza, asa ca cel mai bine raman la solutia cu registrul suplimentar. Mersi de ajutor!
  2. CSm1n

    [ASM] Noob

    @Usr6Metoda 1 am incercat-o deja, am mentionat asta in prima postare. La a 2-a metoda se elimina dereferentierea ca la celelalte, si anume debuggerul arata: push plm.exe+4CCE6C pop edx Asa ca in edx imi incarca adresa in loc sa imi incarce continutul adresei. Ar putea fi vinovat compilatorul? Folosesc VS2015, dar inclin sa cred ca nu poate sa fie o problema atat de mare intr-un un produs M$...
  3. CSm1n

    [ASM] Noob

    @Usr6 Instructiunea pe care vreau eu sa o implementez nu este un jump, pur si simplu incarca in edx continutul adresei respective. Deci ce mi-ai dat nu este compatibil...
  4. CSm1n

    [ASM] Noob

    Salutare! Lucrez la un programel si m-am lovit de o problema de care nu pot sa ii dau de cap si ma gandeam ca as putea primi o mana de ajutor de aici. Am un executabil fara cod sursa care la un moment dat executa opcode: mov edx,[plm.exe+4CCE6C] Ce vreau eu sa fac este sa reproduc instructiunea asta intr-un dll pe care il incarc in executabilul mai sus mentionat. Cunostintele mele (care sunt sub nivelul marii) in materie de ASM m-au ajutat sa rescriu niste bucatele din memoria executabilului astfel incat sa faca jmp la mine in dll intr-o functie naked, dar mai departe trebuie sa scriu la mine in functi acel opcode si chiar nu am idee cum. Base address e constanta, asa ca stiu care este adresa finala (0x400000+0x4CCE6C = 0x8CCE6C) Am incercat: // varianta 1: __asm { mov edx, [0x8CCE6C] } // varianta 2: __asm { mov edx, dword ptr[0x8CCE6C] } Dar cand am verificat codul in debugger, compilerul a eliminat dereferentierea(cred ca asa se numesc acele paranteze patrate din jurul adresei), iar instructiunea finala arata asa in ambele cazuri: mov edx, plm.exe+4CCE6C Daca se poate, imi puteti explica ce fac eu gresit? ------------------------------ // EDIT: Am reusit sa fac o smecherie, si anume dau push la eax pe stack, scriu in eax adresa, fac acea mutare si apoi dau pop la eax de pe stack: __asm { push eax mov eax, 0x8CCE6C mov edx, [eax] pop eax } Totusi, ce e gresit in primele mele 2 exemple si nu este nicio metoda sa execut acea instructiune fara sa folosesc un register in plus?
×
×
  • Create New...