如何获取c函数字节并将其转换为char

时间:2014-05-24 21:17:27

标签: c

我正在寻找一种加载函数并将其转换为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

你知道这是什么意思吗?

2 个答案:

答案 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;
}