Categories > Coding > C++ >

C++ Intermediate Lessons EP: 3 : Terminology


luxiferrwoo

exprssn#6408

Posts: 234

Threads: 42

Joined: May, 2022

Reputation: 16

  • 1

Posted

In your reverse engineering journey, you'll encounter a lot of terminologies you may not recognize, and some of those terms may sound complicated or confusing. Still, I'm here to not only give you their acronyms but a brief explanation of each:
 
RVAs / Relative Virtual Addresses: Don't worry about the word "virtual" in this term, for now, what you should focus on is why it's called a relative address, the reasoning behind this is that the address is relative to the base address of the process, this is: An address relative to the base address of the process ( Base address of the first loaded module, which in any executable file, is the .exe itself and the rest are DLLs )
 
Module: A module is simply a .dll or .exe loaded into the memory of a process.
 
DLL / Dynamically Linked Library: A dynamically linked library is a native binary and can be loaded ( injected ) into a process at run-time ( dynamically ), this allows for easy access to the memory of other modules within the said process which makes DLLs a good choice for game cheats ( though this does come with a set-back: easy detection )
 
RTTI / Run-time type information: RTTI is a mechanism in languages such as C++ where the type information of an object is exposed and can be discovered at run-time, in the context of classes, this feature is present when an object has at least one virtual function.
 
Virtual Function: A virtual function in C++ is simply a class member function that can be overridden by a derived class to allow for different functionality across derived classes of a base class.
 
Virtual Function Table / Virtual Method Table / VMT / VFT:  A virtual function table is a table that holds the addresses of virtual functions to be later dispatched ( called ) 
 
Virtual Function Pointer: A virtual function pointer is at the beginning of every class with at least 1 virtual function ( thus increasing the size of the class by sizeof( void* ) ) and it points to the virtual function table of said class, every derived class of a base class with a virtual function has this pointer at the beginning of its class aswell.
 
BP / Breakpoint: A breakpoint is categorized as an exception, normally used for debugging, like any other exception, it stops execution and debuggers use breakpoints so that you, the user, can step through instructions or examine the current state of the process.
 
Run-time Polymorphism: C++ Run-time polymorphism is a technique used to perform dynamic dispatching through the use of virtual functions and virtual function tables.
 
Compile-time Polymorphism: Compile-time polymorphism is achieved by function overloading and operator overloading.
 
ISA / Instruction Set Architecture: A instruction set is a set of instructions that are used in a determined architecture, for example, the x86 architecture is an instruction set architecture.

14 | [c, cpp, lua, python]

! exprssn.sentiment#9999 | https://github.com/expressiongz

 

AlternateD

hello there

Posts: 487

Threads: 62

Joined: Mar, 2022

Reputation: 8

  • 0

Replied

Thank you, with the help of your tutorials I have been able to make the best C++ code ever!1!!1!!1

#include<iostream>
#include<string>
#define cinge std::cout
#define cingynum int
#define cingystr string
#define obfuscate ;
#define silly =
#define sillysilly ==
using namespace std;
int cingycingers() {cinge << "sily momen\n";cingynum cingey silly 1;cingystr cinga silly "\n";cinge << cingey << cinga;cingynum cangy silly 2;if (cangy sillysilly 2){cinge << "sily so sily";}}
int main() {
    cingycingers();
}

Tell me what you think of my best code!

exploiters are 😎

 

RealNickk

no longer active

vip

Posts: 3964

Threads: 177

Joined: Feb, 2020

Reputation: 56

  • 0

Replied

@AlternateD

int yes = 0xDEADBABE;
std::uintptr_t thingies[100]{ &yes };

for (int i = 1; i < 100; i++)

    thingies[i] = &thingies[i - 1];

int**************************************************************************************************** cool = thingies[99];

std::cout << std::hex << ****************************************************************************************************cool << std::endl;

AlternateD

hello there

Posts: 487

Threads: 62

Joined: Mar, 2022

Reputation: 8

  • 0

Replied

@atari

Pretty much.

exploiters are 😎

 



Users viewing this thread:


( Members: 0, Guests: 1, Total: 1 )