Articles of x86

从组件中读取文件

我正在尝试从x86文件中的文件读取用户名和密码的身份certificate显然该文件包含两行,用户名和密码我怎样才能读两条线分别比较呢? 我的尝试: proc read_file mov ah,3dh lea dx,file_name int 21h mov bx, ax xor si,si repeat: mov ah, 3fh lea dx, buffer mov cx, 100 int 21h mov si, ax mov buffer[si], '$' mov ah, 09h int 21h ;print on screen cmp si, 100 je repeat jmp stop;jump to end stop: RET read_file ENDP

与NASM一起使用DLL

我一直在使用NASM在Windows中进行一些x86编程,而且我遇到了一些困惑。 我很困惑,为什么我必须这样做: extern _ExitProcess@4 具体而言,我对“_”和“@ 4”感到困惑。 我知道'@ 4'是堆栈的大小,但它为什么需要? 当我用hex编辑器查看kernel32.dll时,我只看到“ExitProcess”而不是“_ExitProcess @ 4”。 我也困惑,为什么C函数不需要下划线和堆栈大小,如下所示: extern printf 为什么C函数不需要装饰? 我的第三个问题是“这是我应该使用这些function的方式吗?” 现在我正在链接到实际的dll文件本身。

尝试通过导入部分直接调用函数

我一直在用汇编语言搞乱PE文件结构。 我很确定我已经正确地进入了导入部分。 我使用这个作为参考,其中每个框等于4个字节: +————————-+————————-+ | RVA to a list of | DATE/TIME | | pointer to APIs names | | IMPORT DATA DIRECTORY +————————-+————————-+ #1 | .DLL address (unused) | RVA to .DLL name | +————————-+————————-+ |RVA to API address list | +————————-+ OllyDbg的。 注意eax在右边的值(00402048),然后查看突出显示的调用指令的值跳转到(00402000)。 我尝试从ExitProcess (RVA到API地址列表)中调用第一个第一个函数,但是当我尝试向该地址发出调用时,它导致我的程序崩溃。 当我使用Ollydbg进行debugging时,发现调用ExitProcess时的地址与我在列表中find的地址不同。 在Ollydbg中,当调用ExitProcess指向<JMP。&KERNEL32.ExitProcess>时,find的地址指向<&KERNEL32.ExitProcess>。 我已经读过某种关于某种jmp存根的地方。 这是什么? 我应该如何调用“RVA到API地址列表”中的函数? 我知道这可能是混乱。 如果你需要更多的澄清,让我知道。 这里是代码: […]

x86程序集 – 窗口不显示,但没有编译时错误

我正尝试使用CreateWindowEx API在CreateWindowEx x86汇编中创build一个窗口。 我已经得到我的代码没有编译时错误或任何types的 – 它编译得很好。 但是,当我运行该exe文件,没有任何反应。 我没有看到任何明显的错误,我实际上已经从Iczelion的Win32教程(第3部分 – 一个简单的窗口)中复制了代码。 它有什么问题? 这是我的代码: .386 .model flat, stdcall option casemap :none WinMain proto :DWORD,:DWORD, :DWORD,:DWORD include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\gdi32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\gdi32.lib .data ClassName db "Testwin", 0 AppName db "Testing Window", 0 .data? hInstance HINSTANCE ? CommandLine LPSTR ? .code […]

窗口不显示(x86 ASM,Windows)

我试图打开一个窗口,里面有一个列表框。 但是没有任何反应,它在Windows的任务pipe理器中保持打开状态约5秒钟,然后closures。 我正在使用Flat Assembler( http://flatassembler.net/ )来组装和链接我的程序。 format PE GUI 4.0 entry Start jp Start include 'win32a.inc' library kernel, 'KERNEL32.DLL', \ user, 'USER32.DLL', \ gdi, 'GDI32.DLL' import kernel,\ GetModuleHandle, 'GetModuleHandleA',\ ExitProcess, 'ExitProcess' import user,\ RegisterClass, 'RegisterClassA', \ CreateWindowEx, 'CreateWindowExA', \ DefWindowProc, 'DefWindowProcA', \ SetWindowLong, 'SetWindowLongA', \ RedrawWindow, 'RedrawWindow', \ GetMessage, 'GetMessageA', \ TranslateMessage, 'TranslateMessage',\ DispatchMessage, 'DispatchMessageA',\ […]

执行特权指令

我有英特尔i5处理器和Windows 7操作系统。 我正在摸索系统试图了解更多。 我意识到我无法访问处理器的特权指令。 例如,我不能写模型特定的寄存器和代码,如下面的执行失败 .model flat,stdcall .stack 4096 .code main proc xor eax,eax xor edx,edx mov ecx,176h wrmsr main endp end main 有没有办法编写可以完全使用处理器和系统及其所有指令的应用程序,而无需编写Windows设备驱动程序? PS:我不介意系统崩溃或文件系统损坏

当控制权返回时,操作系统是否会假定被调用者保存的寄存器?

当控制权返回时,操作系统是否会假定被调用者保存的寄存器? 我想知道操作系统,比如说Windows,是否假定被保存的寄存器如ebp, esi, edi ? 换句话说,操作系统是否要求保存这些寄存器中的值,当控制权传回给它时( main ret )? 我找不到任何指定的东西,但我想答案是否定的(看过编译器生成的代码)。 有没有关于这个话题的任何文件?

在Windows下的NASM,Hello World的例子比较

这两个例子是一样的,他们只是打印一个"Hello, World!" 信息: 例1: global _main extern _printf section .text _main: push message call _printf add esp, 4 ret message: db "Hello, World!", 13, 10, 0 这是命令行: nasm -fwin32 0.asm gcc 0.obj 例2: global _main extern _ExitProcess@4, _printf section .text _main: push message call _printf add esp, 4 push 0 call _ExitProcess@4 message: db "Hello, […]

exception处理

我试图写一个代码来处理exception,但是覆盖另一个exception处理程序,这有可能吗? 我正在开发一个.exe的asm来debugging一个.dll ,并检测一些引发的exception(访问冲突),但.dll有自己的exception处理,所以一个正常的SEH不应该工作。 我想知道是否有任何一种全局exception处理程序可以覆盖这些现有的exception处理程序?

内核内存地址空间

我读过,在一个带有4GB系统内存的32位系统上,2GB分配给用户模式,2GB分配给内核模式。 但是,如果我有一个512 MB内存的系统,它会被划分为256 MB的用户和256 MB的内核地址空间?