Jump to content
    1. Welcome to GTAForums!

    1. GTANet.com

    1. GTA Online

      1. Los Santos Drug Wars
      2. Updates
      3. Find Lobbies & Players
      4. Guides & Strategies
      5. Vehicles
      6. Content Creator
      7. Help & Support
    2. Red Dead Online

      1. Blood Money
      2. Frontier Pursuits
      3. Find Lobbies & Outlaws
      4. Help & Support
    3. Crews

    1. Grand Theft Auto Series

      1. Bugs*
      2. St. Andrews Cathedral
    2. GTA VI

    3. GTA V

      1. Guides & Strategies
      2. Help & Support
    4. GTA IV

      1. The Lost and Damned
      2. The Ballad of Gay Tony
      3. Guides & Strategies
      4. Help & Support
    5. GTA San Andreas

      1. Classic GTA SA
      2. Guides & Strategies
      3. Help & Support
    6. GTA Vice City

      1. Classic GTA VC
      2. Guides & Strategies
      3. Help & Support
    7. GTA III

      1. Classic GTA III
      2. Guides & Strategies
      3. Help & Support
    8. Portable Games

      1. GTA Chinatown Wars
      2. GTA Vice City Stories
      3. GTA Liberty City Stories
    9. Top-Down Games

      1. GTA Advance
      2. GTA 2
      3. GTA
    1. Red Dead Redemption 2

      1. PC
      2. Help & Support
    2. Red Dead Redemption

    1. GTA Mods

      1. GTA V
      2. GTA IV
      3. GTA III, VC & SA
      4. Tutorials
    2. Red Dead Mods

      1. Documentation
    3. Mod Showroom

      1. Scripts & Plugins
      2. Maps
      3. Total Conversions
      4. Vehicles
      5. Textures
      6. Characters
      7. Tools
      8. Other
      9. Workshop
    4. Featured Mods

      1. Design Your Own Mission
      2. OpenIV
      3. GTA: Underground
      4. GTA: Liberty City
      5. GTA: State of Liberty
    1. Rockstar Games

    2. Rockstar Collectors

    1. Off-Topic

      1. General Chat
      2. Gaming
      3. Technology
      4. Movies & TV
      5. Music
      6. Sports
      7. Vehicles
    2. Expression

      1. Graphics / Visual Arts
      2. GFX Requests & Tutorials
      3. Writers' Discussion
      4. Debates & Discussion
    1. Announcements

    2. Support

    3. Suggestions

Happy Holidays from the GTANet team!

[C++ / assembly] Code cave in MSVC x64?


ikt
 Share

Recommended Posts

Hi there! This is a rather far fetched question but I really have no idea where to realistically start.

 

So I have a single instruction I want to jump over conditionally, but so far I've only NOP'd a bunch of bytes. There are some guides for doing such things(1), but apparently doing inline assembly is not permitted with MSVC x64.

 

Somebody did find a way around(2), but this is rather vague to me and I wouldn't know if just replacing the bytes would work or I'd need to recompile the section I want to get.

 

Since the above examples also dealt with finding another process and hooking into it, there's some overhead, but I can't quite lay my finger on what to do once you have the address of the instruction that's going to get replaced for the code cave.

 

So, here's my questions in general:

1. Do I just dump my code in some code cave with memcpy?

2. Do I just "call" the address of where I wrote to?

3. Do registers still hold the same value when the program is running the code cave code?

4. When returning, do I need to do other things?

 

And x64 in particular:

5. Can I just hand-write code, or do I need to (somehow?) generate machine code from assembly?

 

Sorry if these are rather basic questions, but I wouldn't know where to start properly messing around.

 

For detail: This is what I want to change:

 

 

GTA5.exe + F10256 - F3 0F11 63 38	- movss[rbx + 38], xmm4
I want to change it to something like

 

movss [rbx+34],xmm3          ; previous instructioncomiss [rbx + 38], 0         ; is this thing 0? (float?)jne [skip instruction below] ; jump short +5?movss[rbx + 38], xmm4        ; original instructionsubss xmm0,xmm4              ; continue with rest of function
Never worked with assembly yet but I'll assume I'll need to move [rbx+38] and 0 into xmm registers first?

 

Edit:

Woop! Using a modified version of CamxxCore's Hooking class I managed to hook a function. No need to mess around with machine code as creating a function in assembly and linking it with the program seems to work fine. Thanks all the people I bothered the last few days <3

Edited by ikt
  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • 1 User Currently Viewing
    0 members, 0 Anonymous, 1 Guest

×
×
  • Create New...

Important Information

By using GTAForums.com, you agree to our Terms of Use and Privacy Policy.