我正在寻找一种加载函数并将其转换为char的方法; 我想得到它的字节。
void myFunc();
int main()
{
char myChar =(char)&myFunc; // stuff like that
return 0;
}
void myFunc()
{
printf("hi!");
}
我试图取消引用我的地址指针@ user2482551:
这是我的新代码:
#include <stdio.h>
void myFunc(){
printf("hi");
}
int main(){
unsigned int* c = (unsigned int*)(&myFunc);
printf("%d\n",*c);
return 0;
}
输出:-443987883
你知道这是什么意思吗?
答案 0 :(得分:1)
我说你想要
char* myChar =(char*)&myFunc; // stuff like that
您无法将地址转换为char
,但您当然可以将其转换为指向字符char*
的指针。
此外,定义main上方的函数,如果不是,则将其原型void myFunc();
声明为main。否则main()
没有“看到”它并且您得到编译时错误。
答案 1 :(得分:1)
以下内容将获取myFunc的地址,并在键入密钥时从该地址开始按字节顺序逐步执行内存:
void myFunc();
int main()
{
void* ptr = &myFunc; // stuff like that
while(getchar() != -1) {
printf("%d", *((char*)ptr++));
}
return 0;
}
void myFunc()
{
printf("hi!");
}
这是我得到的输出:
[gregor@localhost tmp]$ ./faddr
85
72
-119
-27
-65
-109
6
我无法判断这是否实际上是通过功能的机器代码...也许你有办法检查这个?例如,使用更简单的东西:
int myFunc()
{
return 0;
}