nasm
LostSpeed
c++ coder
展开
-
nasm : 用栈传递 int13h ah=42h 的 disk address packet 参数分析
逆向ultraIos制作的MBR, 看到disk address packet 参数是通过栈传递的.这样搞,确实省空间, 不过容易看错, 也不好理解.; =============== S U B R O U T I N E =======================================; /// @fn fn_read_sectors_into_memory; /原创 2015-10-03 14:49:09 · 2292 阅读 · 0 评论 -
nasm : test jmp instruction
前言验证一下nasm编译后的JMP指令的跳转地址计算.测试用例: 不同的跳转偏移, 不同的跳转方向测试程序; /// @file boot_dispmsg/test_op_code_jmp.asm; /// @brief 测试jmp命令的向上跳和向下跳的的目标地址计算; /// @note 编译命令行 ; /// cd D:\prj\nasm_prj\boot\boot_di原创 2015-09-30 11:54:28 · 936 阅读 · 0 评论 -
nasm : dynamically modify bin nasm code
前言在逆向ultraIos制作的MBR代码时,发现了动态修改代码的实现,这么做,可以减小bin的size, 现在看到的作用就这点这么搞,可能也比较隐蔽, 如果二进制程序比较大, 用IDA分析时, 会将分析者弄糊涂~在内存中修改代码的要点是: 将代码段当成数据段, 在bit16实模式下, 将数据段ds和代码段cs都指到一起就行.e.g. 2个汇编函数就差几个命令字节不同, 而原创 2015-09-30 10:57:28 · 747 阅读 · 0 评论 -
写个测试程序看看磁盘映像文件中哪个扇区可以使用?
在做boot loader的实验, 但是要在格式化为FAT32的U盘上使用.* 用WinHex将U盘全部字节都填成0.* 用UltraIso中的格式化功能, 将U盘格式化成FAT32, 分配单元为4KB* 用UltraIso提供的写入MBR功能,向U盘写入可引导的MBR, 参数为USB-HDD.这问题就来了,MBR在0扇区,我们可以通过逆向ultraIso写入的MB原创 2015-09-29 11:37:55 · 1121 阅读 · 0 评论 -
(ZT)Why BIOS loads MBR into 0x7C00 in x86 ?
original url from :http://www.glamenv-septzen.net/en/view/6The mysteries arround "0x7C00" in x86 architecture bios bootloaderDo you know "0x7C00", a magic number, in x86 assembler program原创 2015-09-29 08:46:37 · 696 阅读 · 0 评论 -
Converting Drive Letters to MS-DOS INT 13H Disk Drive Numbers
original url from : https://support.microsoft.com/en-us/kb/62571SUMMARYThe BIOS Interrupt 13H uses a zero-based number for floppy disk drives ("A"= 0, "B"= 1, and so on), and a zero-bas原创 2015-09-28 14:14:36 · 859 阅读 · 0 评论 -
DISK - Check for INT 13h Extensions
逆向UltraIso制作的MBR时,看到里面用到了 int 13h, ah = 41h 的bios接口.查了下,这个接口判断磁盘扩展功能。seg000:004C loc_4C: ; DATA XREF: seg000:0055rseg000:004C原创 2015-09-28 10:44:52 · 822 阅读 · 0 评论 -
nasm : dump memory to file on bochsdbg
今天在逆向ultraIos制作的MBR, 发现MBR程序根据条件(硬盘是否支持int 13h 扩展), 将内存中的汇编指令动态改了.这样导致IDA分析的被动态修改之前的MBR代码, 和修改之后的MBR代码不一样.现在只能将修改后的MBR汇编代码Dump出来.我使用bochsdbg单步调试的, 当代码被修改后, 需要用bochsdbg自带命令dump出来.在自带帮助中看到有原创 2015-09-27 21:42:01 · 770 阅读 · 0 评论 -
nasm : test bit
验证汇编指令bt : 取指定的位到CF标志setc : 设置CF到字节nasm代码:; @file ex1-1.asm; @brief >; 测试计算机内容是小端序还是大端序排放, 用位测试的方法; @note 编译命令行 ; cd D:\prj\nasm_prj\boot\boot_dispmsg\ex1-1; d:; C:\nasm\nasm.exe ex1原创 2015-09-25 10:16:12 · 688 阅读 · 0 评论 -
nasm : test eflags ZF
看看如何在bochs中查看标志寄存器,当标志寄存器置位和清零0,都是什么样子.查看eflags的bochs命令 : info eflags当(0 === ZF)时, ZF标志显示为zf当(1 == ZF)时,ZF标志显示为ZF其他标志位也是这样显示.Next at t=156867343(0) [0x000000007c39] 0000:7c39 (unk.原创 2015-09-24 12:42:31 · 1075 阅读 · 0 评论 -
nasm : 修改bochs配置, 记录调试屏幕的输出.
使用bochsdbg时,中间过程要输入和显示很多自己想要的调试内容.但是等关闭bochsdbg时,这些内容都没有了。如果在使用bochsdbg的过程中,用Windows提供的标记,拷贝,然后再粘贴到记事本。会打断调试的思路, 也很烦人.在看bochs配置文件提供的样例时, 发现有配置可以做这个事情~#=====================================原创 2015-09-24 10:42:13 · 2088 阅读 · 0 评论 -
nasm : 屏幕打印语句的实现
就像应用层编程一样,如果不借助第三方工具和调试器,要知道程序哪里出了问题,需要记录日志.bochs和真机还是有点区别的, 前几天搞出了打印语句, 拖到今天,实验环境搞定后,才在真机上验证通过.现在实验用的这1个扇区,是MBR加载到内存的, 验证函数级别的问题,应该是可以了.现在一个扇区被写的差不多满了,下一步要考虑,用BOOT代码加载更多的扇区,然后调到加载后新的扇区,原创 2015-09-23 16:29:45 · 3063 阅读 · 0 评论 -
nasm : 在bochs中使用真实U盘生成的硬盘映像
现在用U盘在做裸机的boot loader实验.刚开始整时,在bochs中用的是软盘映像, 等逻辑没问题了,再贴到U盘扇区上.这样和实际情况对不上, 已经遇到了由于MBR的产生者不通,导致BOOT代码到达不了的情况.刚才用真实U盘生成硬盘映像,供bochs实验, 已经做通了。运行效果也和在真实U盘上运行,基本一致.* 将U盘插入计算机, 用WinHex打开.* 在U原创 2015-09-23 15:53:48 · 4279 阅读 · 0 评论 -
nasm : 搭建可用的裸机U盘环境
实验对象 : 联想G480 + TOSHIBA TransMemory (7.2 GB, USB)上周直接向U盘0扇区,写程序是可以有实验效果的. 这周,突然就不行了.然后一直琢磨,怎样搞一个能用的U盘实验环境.实验环境这块还挺重要的,要不实验都搞不下去了。很多人都是在bochs下做实验,我是想在bochs下调试通了,再搬到U盘上启动本本, 有了效果,那才是真实原创 2015-09-23 14:55:39 · 998 阅读 · 0 评论 -
U盘初始化程序对U盘做出的数据修改分析
实验对象:TOSHIBATransMemory(7.2GB,USB)总容量:7759462400=0x1CE800000Bytes用WinHex对U盘全部填空,保存成uDisk_all_zero.bin用老毛桃”初始化U盘”功能后,用WinHex将U盘全部内容保存成uDisk_init_ok_by_lmt.bin用WinHex的文件比较原创 2015-09-22 15:20:47 · 1212 阅读 · 0 评论 -
nasm : use bochs debug boot loader
编译boot loaderMicrosoft Windows [版本 6.1.7601]版权所有 (c) 2009 Microsoft Corporation。保留所有权利。C:\Users\LostSpeed>d:D:\>cd D:\prj\nasm_prj\boot\boot_dispmsgD:\prj\nasm_prj\boot\boot_dispmsg>C:\nasm\n原创 2015-09-19 23:16:34 · 2059 阅读 · 0 评论 -
nasm : 堆栈平衡的函数调用
做实验时,发现有时执行的效果不科学。开始直接烧到U盘0扇区,很麻烦。一直找不到错在哪.后来用bochsdbg单步,很快发现了问题.* 参数传递时, [bp + 2]为栈中参数的开始* 函数调用完,需要调用者进行堆栈平衡bochs挺好用的, 调试利器. 写的很人性化,只要用过别的调试器,很快上手,命令不多,10几个. 命令字的助记符也很好记.显示效果和裸机上相同.原创 2015-09-19 11:30:35 · 925 阅读 · 0 评论 -
Using Bochs internal debugger
来自Bochs自带帮助,想看下调试命令。8.13. Using Bochs internal debuggerYou can now conditionally compile in a GDB like command line debugger, thatallows you to set breakpoints, step through instructions, and ot原创 2015-09-17 14:14:48 · 998 阅读 · 0 评论 -
使用bximage制作软盘映像
Microsoft Windows [版本 6.1.7601]版权所有 (c) 2009 Microsoft Corporation。保留所有权利。C:\Users\LostSpeed>cd "c:\Program Files (x86)\Bochs-2.6.8"c:\Program Files (x86)\Bochs-2.6.8>dir *.exe 驱动器 C 中的卷是 sys 卷原创 2015-09-17 12:36:04 · 6153 阅读 · 0 评论 -
NASM import win32api
找到些资料, 现在可以在nasm工程中引入win32api了.应该说, nasm的编译环境已经准备好了.; import_api.asmBITS 32; %include "C:\nasm\include\win32n.inc"MB_OK equ 0hextern printfimport printf MSVCRT.DLL extern MessageBoxA原创 2015-08-04 10:25:42 · 1513 阅读 · 0 评论 -
NASM : hello world
从网上找到的资料,整理一下, 用来学习NASM编程.hello.asm; hello world on nasm global _main extern _printf section .datamsg db 'hello world on nasm, x86', 0dh, 0ah, 0h section .bss section .text_main: pus原创 2015-08-02 21:36:25 · 1255 阅读 · 0 评论