LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 978|回复: 11

打印自己的问题

[复制链接]
发表于 2004-10-15 02:35:02 | 显示全部楼层 |阅读模式
  1. char *p = [color=orange]"\xa\x6d\x61\x69\x6e\x28\x29\xa\x7b\xa\x9\x63\x68\x61\x72\x20\x2a\x71\x20\x3d\x20\x70\x3b\xa\x9\x70\x72\x69\x6e\x74\x66\x20\x28\x22\x63\x68\x61\x72\x20\x2a\x70\x20\x3d\x20\x5c\x22\x22\x29\x3b\xa\x9\x77\x68\x69\x6c\x65\x20\x28\x2a\x70\x29\xa\x9\x9\x70\x72\x69\x6e\x74\x66\x20\x28\x22\x5c\x5c\x78\x25\x78\x22\x2c\x20\x2a\x70\x2b\x2b\x29\x3b\xa\x9\x70\x72\x69\x6e\x74\x66\x20\x28\x22\x5c\x22\x3b\x5c\x6e\x25\x73\x22\x2c\x20\x71\x29\x3b\xa\x7d\xa"[/color];
  2. main()
  3. {
  4.         char *q = p;
  5.         printf ("char *p = [color=red]""[/color]);
  6.         while (*p)
  7.         printf ([color=red]"\\x%x"[/color], *p++);
  8.         printf ([color=red]"";\n%s"[/color], q);
  9. }
复制代码


这是我从cu上看到的

澄色部分是涵数体的变形用十六进制的形式表现出来 ,什么意思 ?

红色部分是什么意思,我用printf从没出现过这样 ?
发表于 2004-10-15 08:21:45 | 显示全部楼层
红色部分是使用\去掉后面紧跟字符的特殊意义,像\"是打印",
橙色部分我也不懂,期待中....................
发表于 2004-10-15 10:39:39 | 显示全部楼层
橙色部分是字符串常量,以16进方式表示每个字符。
比如'\xa'表示一个值为10的字符。其中\x表示接下来的用16进制数表示的字符值
 楼主| 发表于 2004-10-15 13:06:39 | 显示全部楼层
最初由 bobhuang 发表
橙色部分是字符串常量,以16进方式表示每个字符。
比如'\xa'表示一个值为10的字符。其中\x表示接下来的用16进制数表示的字符值



好端端的字符不打,为什么要用16进制 ? 有什么作用 ?

什么地方需要用上 ?
发表于 2004-10-15 13:32:43 | 显示全部楼层
最初由 shell 发表
好端端的字符不打,为什么要用16进制 ? 有什么作用 ?

什么地方需要用上 ?


为了让你一下子看不懂  :p

当需要shellcode的时候
 楼主| 发表于 2004-10-15 14:01:19 | 显示全部楼层
shellcode ? 指shell代码 ?
发表于 2004-10-15 14:38:23 | 显示全部楼层
字符在计算机中以其ASCII码方式表示, 其长度为1个字节, 有符号字符型数取值范围为-128~127, 无符号字符型数到值范围是0~255。其中有些是控制字符,不在C语言允许的字母和符号表内,比如换行符,制表符等
这些字符的输入只能用具体的数字值来输入。
除了\x方式输入16进制数之外,还可以用\o的方式输入8进制数,另外,有些预定义的特殊字符,如'\n','\t'。

字符串在C中还常被用做字节数组,其内容没有字符的意义,只是一串8位的数。对这种类型的字节数组进行初始化赋值时,采用楼主橙色部分的代码形式相当简洁有效。
发表于 2004-10-15 14:44:16 | 显示全部楼层
楼主的问题在C语言教科书里都有答案,比如\x的用法讲“数据类型”时应该提到,楼主的基础不扎实啊
 楼主| 发表于 2004-10-15 15:41:03 | 显示全部楼层
最初由 bobhuang 发表
字符在计算机中以其ASCII码方式表示, 其长度为1个字节, 有符号字符型数取值范围为-128~127, 无符号字符型数到值范围是0~255。其中有些是控制字符,不在C语言允许的字母和符号表内,比如换行符,制表符等
这些字符的输入只能用具体的数字值来输入。
除了\x方式输入16进制数之外,还可以用\o的方式输入8进制数,另外,有些预定义的特殊字符,如'\n','\t'。

字符串在C中还常被用做字节数组,其内容没有字符的意义,只是一串8位的数。对这种类型的字节数组进行初始化赋值时,采用楼主橙色部分的代码形式相当简洁有效。



是初始化 ? 有必要搞这么多吗 ?

字节数组是什么概念 ? 你说的我听得懂,既然你说内容没有字符的意义,那么为什么要在这个地方使用,有何用 ?
发表于 2004-10-15 16:21:14 | 显示全部楼层
楼主的这个程序功能很简单,确实没有必要搞的太复杂,完全可以写成

  1. char *p = "Hello world!";
复制代码

通俗易懂,皆大欢喜。
至于为什么要一定在这个地方用,只能问程序的原作者了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表