strncat 最后一个参数是int不是指针。直接用数字。你这里用2就行了。 |
我不知你是如何查找的.... 用Google 搜grub4dos.h ,第一个就是了.还找半天,可能是用的百度的原因.. 用百度很多技术资料都找不到的,建议还是放弃吧. 这些定义可以不用去管的,使用方法和C语言的函数一样. 像strstr函数用法参考 http://www.kuqin.com/clib/string/strstr.html 这些定义我以前也不懂的,后面对C语言比较了解一些之后才明白些,需要理解C语言的指针. 再看定义 #define strstr ((char *(*)(const char *, const char *))((*(int **)0x8300)[11])) 1.char *(*)(const char *, const char *) (*) 说明这个是个指向函数的指针. char *是返回值,返回指向字符串的指针. (const char *, const char *)对应的参数. 后面的(*(int **)0x8300)[11])是该函数对应的地址. 0x8300这个地址上的值是一个指针,指向GRUB4DOS提供的函数指针列表开始处,列表中又是一系列的指针指向真实的函数. 不过像STRSTR之类的函数,如果是用来编写外部命令可以使用,若是在命令行下就不好使了,除非你同样用指针地址. 命令行使用的例子 ::在0x60000地址处写入字符串abcd**1234供测试 write (md)0x300+1 abcd**1234\0 ::调用strstr函数查找"**" call Fn.11 0x60000 "**" set /A ret=%@retval% 得到ret的值应该是0x60004. 命令行调用函数时字符串可以直接提供也可以用一个数值(代表指针地址) 像 ::显示0x60000处的字符串内容 call Fn.0 0 0x60000 直接提供字符串 call Fn.0 0 "atesta" |
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.