473,396 Members | 2,109 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,396 software developers and data experts.

How do i convert an integer to an address for a function pointer

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

}

}

Mar 16 '06 #1
10 5601
>Can this be done.

Compile and run your code and you'd find out.

Ben
Mar 16 '06 #2
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

Mar 16 '06 #3
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.
Mar 16 '06 #4
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);
}
Mar 16 '06 #5
Then u can take ,

unsigned _int64 (or)
long long unsigned int
........ here 64-bit pointers may fit.

:-)
Thanx,
Rama

Mar 16 '06 #6
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.
Mar 16 '06 #7
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.
Mar 16 '06 #8
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
Mar 17 '06 #9
Me
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();

Mar 17 '06 #10
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

Mar 17 '06 #11

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

4
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);
16
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...
3
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 =...
28
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...
12
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...
8
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 =...
232
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...
8
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...
8
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 =...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
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...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
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...
0
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...
0
marktang
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,...
0
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...
0
Oralloy
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,...
0
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...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.