I am trying to convert a integer to an address of a function pointer.
I want to encrypt the pointer and then do some validation, afterwards i
will decrpyt the pointer back to an address. Can this be done. Below
is some of my code.
typedef void (*funcptr)(void);
void tryme(void){};
void main()
{
char *buffer = new char[30];
// save address of tryme fuction into a string
itoa ( (unsigned int)(&tryme),buffer,16);
Encrypt(buffer);
//some code here
// retreive address tryme function
decryptbuffer = Decrypt(buffer);
unsigned int x = (unsigned int)atoi(decryptbuffer );
funcptr restoreFuncPtr = (funcptr)x; // convert int to funcptr
address
}
} 10 5601
>Can this be done.
Compile and run your code and you'd find out.
Ben
Hi,
Your code should work.
But, using reinterpret_cast<> is safe
Checkout the following code snippet
typedef int (*FP)(void);
int add()
{
return 10;
}
main()
{
FP funPtr;
unsigned int num = reinterpret_cast<unsigned int>(add);
funPtr = reinterpret_cast<FP>(num);
printf("%d", funPtr());
}
Thanx,
Rama ro************@gmail.com wrote: I am trying to convert a integer to an address of a function pointer.
I want to encrypt the pointer and then do some validation, afterwards i will decrpyt the pointer back to an address. Can this be done. Below is some of my code.
typedef void (*funcptr)(void); void tryme(void){};
void main() {
char *buffer = new char[30]; // save address of tryme fuction into a string itoa ( (unsigned int)(&tryme),buffer,16); Encrypt(buffer);
//some code here
// retreive address tryme function decryptbuffer = Decrypt(buffer); unsigned int x = (unsigned int)atoi(decryptbuffer ); funcptr restoreFuncPtr = (funcptr)x; // convert int to funcptr address
What makes you think the value of a pointer will FIT
inside an unsigned integer?
You might have 64-bit pointers and 32-bit unsigned ints,
what then?
HTH,
- J.
posted: I am trying to convert a integer to an address of a function pointer.
typedef unsigned long PointerNumericValue;
void* Encrypt( void* p )
{
PointerNumericValue value = reinterpret_cast<unsigned long>(p);
//Now encrypt it:
p << 2;
p += 3;
//Now return it:
return reinterpret_cast<void*>(p);
}
Then u can take ,
unsigned _int64 (or)
long long unsigned int
........ here 64-bit pointers may fit.
:-)
Thanx,
Rama
Ramki wrote: Then u can take ,
unsigned _int64 (or) long long unsigned int ........ here 64-bit pointers may fit.
:-)
Yes, if you have stuff like "_int64". That, however,
raises the question of what happens if pointers are
bigger still, or ints are 16-bit?
What I meant to say was, you can't assume a 1:1
relationship between the size of a pointer and
sizeof(unsigned int).
- J.
Tomás wrote: posted: I am trying to convert a integer to an address of a function pointer. typedef unsigned long PointerNumericValue; void* Encrypt( void* p ) { PointerNumericValue value = reinterpret_cast<unsigned long>(p); //Now encrypt it: p << 2; p += 3; //Now return it: return reinterpret_cast<void*>(p); }
Still, what if it doesn't fit inside an unsigned long?,
although it's the OP's problem.
- J.
On 16 Mar 2006 01:57:57 -0800, "Ramki" <wr*******@gmail.com> wrote in
comp.lang.c++: Hi, Your code should work. But, using reinterpret_cast<> is safe
Checkout the following code snippet
typedef int (*FP)(void); int add() { return 10; }
main()
Your program is ill-formed, implicit int is no valid in C++, all
function definitions and declarations must specify a return type.
{ FP funPtr; unsigned int num = reinterpret_cast<unsigned int>(add); funPtr = reinterpret_cast<FP>(num); printf("%d", funPtr()); }
Thanx, Rama
Your compiler is non conforming, or you are not invoking it in
conforming mode, if it accepts this program without issuing a
diagnostic for the implicit int in the definition of main().
It is also non-conforming if it accepts the application of
reinterpret_cast on a function pointer type to any scalar type. This
is just plain not valid C++.
--
Jack Klein
Home: http://JK-Technology.Com
FAQs for
comp.lang.c http://c-faq.com/
comp.lang.c++ http://www.parashift.com/c++-faq-lite/
alt.comp.lang.learn.c-c++ http://www.contrib.andrew.cmu.edu/~a...FAQ-acllc.html ro************@gmail.com wrote: I am trying to convert a integer to an address of a function pointer.
I want to encrypt the pointer and then do some validation, afterwards i will decrpyt the pointer back to an address. Can this be done. Below is some of my code.
Not guaranteed to work at all (see J.5.7 in the C standard)
typedef void (*funcptr)(void); void tryme(void){}
<snip>
funcptr fn = tryme;
unsigned char buf[sizeof(fn)];
memcpy(buf, &fn, sizeof(fn));
encrypt_inplace(buf, sizeof(fn));
....
decrypt_inplace(buf, sizeof(fn));
memcpy(&fn, buf, sizeof(fn));
fn();
Thanks alot the method below worked.
Hi,
Your code should work.
But, using reinterpret_cast<> is safe
Checkout the following code snippet
typedef int (*FP)(void);
int add()
{
return 10;
}
main()
{
FP funPtr;
unsigned int num = reinterpret_cast<unsigned int>(add);
funPtr = reinterpret_cast<FP>(num);
printf("%d", funPtr());
}
Thank you,
Rodrigo This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Kay |
last post by:
how to convert int to char * ?
I have found this in a web site. However, it doesn't work even I change
itoa to atoi including stdlib.h
char str;
int i=567;
str=itoa(i, str, 10);
|
by: jose_luis_fdez_diaz_news |
last post by:
Hi,
If I don't include <libgen.h> I get then warnig below in regcmp call:
warning: improper pointer/integer combination: op "="
but if I include it the warning is not shown, but them program...
|
by: Mike Miller |
last post by:
What is the best way to convert a managed unsigned int64 to an
unsigned long? Basically I need to do the following:
System::UInt64 managedInt = 10;
unsigned long unmanagedInt;
unmanagedInt =...
|
by: anonymous |
last post by:
I have couple of questions related to array addresses. As they belong
to the same block, I
am putting them here in one single post. I hope nobody minds:
char array;
int address;
Questions...
|
by: Abhishek |
last post by:
now suppose I have declared an integer value inside a function as
int x;
now if the return type of the function is of type (void *) then can I
write
return((void *)x) in side the function?
I...
|
by: Polaris431 |
last post by:
I have a buffer that holds characters. Four characters in a row
represent an unsigned 32 bit value. I want to convert these characters
to a 32 bit value. For example:
char buffer;
buffer =...
|
by: robert maas, see http://tinyurl.com/uh3t |
last post by:
I'm working on examples of programming in several languages, all
(except PHP) running under CGI so that I can show both the source
files and the actually running of the examples online. The first...
|
by: =?Utf-8?B?V2hpdG5leSBLZXc=?= |
last post by:
Hi there,
I'm having a bit of trouble using an HRASCONN object as a class member
variable inside my managed C++ class. When I call RasDial() and pass in the
address of my HRASCONN object, I get...
|
by: Frank Liebelt |
last post by:
Hi
I try to convert a int array into a char array. My code: void exec()
{
char mds;
int i;
int mdc =...
|
by: Charles Arthur |
last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
|
by: ryjfgjl |
last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
|
by: nemocccc |
last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
|
by: Sonnysonu |
last post by:
This is the data of csv file
1 2 3
1 2 3
1 2 3
1 2 3
2 3
2 3
3
the lengths should be different i have to store the data by column-wise with in the specific length.
suppose the i have to...
|
by: Hystou |
last post by:
There are some requirements for setting up RAID:
1. The motherboard and BIOS support RAID configuration.
2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
|
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
| |