|
这个小东东我以看见过, 帮大家解读一下:
(1) "在DOS下用debug < 文档名.txt"
这名话的功能是用 debug 来解析 "文档名.txt"中的命令. 语法 debug [[Drive:][Path] FileName [parameters]] debug 下的子命令如下所示: (可以windows 的帮助中获取)
Debug:a (assemble) Debug:c (compare) Debug:d (dump) Debug:e (enter) Debug:f (fill) Debug:g (go) Debug:h (hexadecimal) Debug:i (input) Debug:l (load) Debug:m (move) Debug:n (name) Debug:o (output) Debug:p (proceed) Debug:q (quit) Debug:r (register) Debug:s (search) Debug:t (trace) Debug:u (unassemble) Debug:W (write) Debug:xa (allocate expanded memory) Debug:xd (deallocate expanded memory) Debug:xm (map expanded memory pages) Debug:xs (display expanded memory status)
(2) Debug: e (enter)将数据输入到内存中指定的地址。 语法 e address [list]
哈哈, 下面的内容就应该理解了吧, 它是把如下十六进制的数据列表放到 内在从100开始的连续内存中去(这里是不是实地址): e100 33 f6 bf 0 20 b5 10 f3 a5 8c c8 5 0 2 50 68 13 1 cb e 1f be a1 1 bf 0 1 e11b 6 57 b8 11 1 bb 21 13 89 7 4b 4b 48 79 f9 ad 86 e0 8b c8 bd ff ff e8 20 e134 0 3d 0 1 74 1a 7f 3 aa eb f3 2d ff 0 50 e8 f 0 5a f7 d8 8b d8 26 8a 1 aa ... DOS时代有个工具叫 exe2bin, 它的功能就是把一个 .exe 文件转换成.com文件, 如果有幸看过它的原码, 就会知道: 其实每个.exe文件都是由 "头" + "映像" 组成的; "头" 里面标记了可执行映像的起始地址. "映像" 是真正的可执行体. 16位的dos程序(本程序就是) 默认的"可执行映像的起始地址"为 100. 嘿, 这下就明白为什么第一行是 e100 ... 了吧. (3) Debug:g (go) 运行当前在内存中的程序。使用不含参数的 g 将在 CS:IP 寄存器的当前地址处开始运行。
语法 g [=address] [breakpoints] g rcx fff n1.com w q
1) 上面这个 g 就是相当于"g 100" 去执行程序啦, 因为这里取的默认地址 100. 2) rcx 就是执行 debug:r 命令, 它是从CX寄存器中读出一个用户输入了. 这就是为什么你按了下任意键程序就终止的原因. 3) 下面 4 句的功能是 置文件名为 n1.com; 并把它用 w 写到当前目录中. 用q 子命令退出. ~完~ (4) 遗憾的是我为没法直接读懂那些直接写到内在中的指令, 分析它的实现原理.
|