Is there a way in C/C++ to put code explicitly at a specified memory adress (code to be executed)? Does that have to be shellcode? (Stack or heap doesn't matter)
(In windows)
Printable View
Is there a way in C/C++ to put code explicitly at a specified memory adress (code to be executed)? Does that have to be shellcode? (Stack or heap doesn't matter)
(In windows)
A few tutorials for specific memory handling in C and C++, both Windows and nix based.
http://www.cpp-home.com/tutorial.php?16_4
http://atrevida.comprenica.com/atrtut04.html
http://www.juicystudio.com/tutorial/cpp/index.asp
edit: fixed links
Thanks alot!
I tried using it in its most simple way:
(From the 2nd link)Code:#include <dos.h>
void pokeb (unsigned int segment, unsigned int offset, char value);
int main() {
pokeb (0x760F, 0x00AE, 125);
return 0;
}
But when linking this error occurs (Borland C++ 5.5):
Error: Unresolved external 'pokeb(unsigned int, unsigned int, char)' referenced
from C:\WINDOWS\DESKTOP\UNTITLED.OBJ
Do I have to link it with another file or something?
Try:
#include <iostream.h>
int main()
{
int x; //A normal integer
int *pointer; //A pointer to an integer
pointer=&x; //Read it, "pointer equals the address of x"
cin>>x; //Reads in x
cout<<*pointer; //Note the use of the * to output the actual number stored in x
return 0;
}
That's as simple as it can get, honestly. If the problem still occurs, not sure what to say, as I am a visual .net user, being unfamiliar with borland.
Yes, but here you rely on the adress of x, I want to write explicitly to an adress I chose.
But thx anyway
So have x == your memory address and define a variable each time?
A yes /me slaps self :D lol, thanks pooh sun tzu
EDIT:
I created 2 proggies:
Program 1:
Program 2:Code:#include <iostream.h>
int i = 2;
int main()
{
cout << &i;
int stuff;
cin >> stuff;
return 0;
}
Now, what I want to do is modify the value of i in program 2.Code:#include <iostream.h>
int main() {
int *pointer;
pointer = (int*)0x0041C178;
cout << "Value1: " << *pointer << endl; /*<- this is supposed to print the value of i from program 1*/
*pointer = 3;
cout << "Value2: " << *pointer;
return 0;
}
So I run program 1 which shows the adress of where i is stored.
The variable i stays in memory right? I use cin to pause the program (yes I know, stupid way but I don't know any other (yet)).
Thus in program 2 I create a pointer to that adress. But whenthe it displays the value of that location it is not the value of i from program 1 which is still running. In this case it is 0 (with me). If I declare the integer in program 1 inside main() it's some number like 570577 (something like that).
Anyone know what is wrong with this?
EDIT2:
I know this is supposed to be impossible as the kernel (should) manages memory and thus that memory adress would normally be protected as it is already in use.
But these programs run without any errors and it's clearly not some form of shared memory (Win98)
just out of curiousity why do you want to write to a specific address?
and why not use assembly? ;)
and I only mean that it's faster and more direct.
i'm not sure why u would need to do that but it has been my exp. that c/c++ has no way to write data to a exat mem adderss because the os loads the program and then a var are offset to the start of the program
but how about this i'm not at home right now i will look though my commads book for c++ and see if there is that i didn't think of.
u could alway write it in assembly most c++ compiler will let u write a function in ASM(assmbly)
Well Im pretty noobyish at both assembly and c++ but one of the reasons I could think of was that person wanted to execute code affecting the memory would be @ h04 or h20 and that would be for the purposes of a .com virus replicating it self. But that would be indiginious to intel family 86 cpu's only , dont know about amd.
and thats not to say what hes thinking of, becuase im sure that there are other good reasons for accessing memory directly with a program in c++,like cleaning it same thing that reg edit does... :confused: