标签: sysenter

32位Linux上的Syscall或sysenter?

从MS-DOS开始,我知道使用中断的系统调用.在旧论文中,我看到了int 80h在Linux上调用系统函数的参考.由于现在相当长的一段时间,我知道int 80h不赞成使用该syscall指令.但我不能让它在我的32位机器上工作.

这个问题

syscall指令仅用于64位平台吗?不是32位Linux使用syscall

样品测试

在我的32位Linux(Ubuntu Precise)上,该程序终止于核心转储:

global _start

_start:
        mov     eax, 4                ; 4 is write
        mov     ebx, 1                ; 1 is stdout
        mov     ecx, message          ; address of string
        mov     edx, length           ; number of bytes
        syscall

        mov     eax, 1                ; 1 is exit
        xor     ebx, ebx              ; return code 0
        syscall

message:
        db  10,"Hello, World",10,10
length  equ $ - message
Run Code Online (Sandbox Code Playgroud)

我试过sysenter而不是syscall,但它以同样的方式崩溃.

linux assembly 32-bit system-calls sysenter

8
推荐指数
2
解决办法
6401
查看次数

Windows 7 x86 使用 sysenter 执行直接系统调用

我正在尝试编写一些程序来直接调用系统调用而不通过 ntdll.dll

我的代码(Visual Studio 语法...):

#include <windows.h>

int main()
{
   _asm{
        push arg1
        push arg2
        push arg3
        mov eax,syscall_id
        mov edx,esp
        _emit 0xf
        _emit 0x34 //sysenter opcodes...
       }
Run Code Online (Sandbox Code Playgroud)

当程序尝试执行 sysenter 指令时,程序会因访问冲突而崩溃:

CALL DWORD PTR DS:[EAX+EDX*4] // Access Violation when reading [00000128]

EAX == 0x00000000
EDX == 0x0000004D
Run Code Online (Sandbox Code Playgroud)

我试图在所需的系统调用中使用内核调试器放置一个硬件断点,但执行流程没有到达那里......

我猜这个问题与堆栈顺序/深度有关。

非常感谢!

解决了:

我想问题是我试图在不加载 user32 和 gdi32 dll 的情况下执行 win32k 系统调用。

刚刚添加:

LoadLibraryW(L"user32.dll");
LoadLibraryW(L"gdi32.dll");
Run Code Online (Sandbox Code Playgroud)

问题解决了..

如果有人更清楚为什么不加载这些 dll 会发生这种情况,我会很高兴知道:)

windows kernel system-calls sysenter

4
推荐指数
1
解决办法
2739
查看次数

64位模式下SYSENTER如何使用,IA32_SYSENTER_CS是什么?

阅读 SYSENTER 指令的描述,我发现了以下内容:

IA32_SYSENTER_CS包含环0代码段(CS)

我以为64位系统现在使用虚拟内存地址方案(分页),基本上不再依赖代码段(CS)寄存器。有人可以解释一下注册表中到底包含什么内容吗IA32_SYSENTER_CS

assembly kernel x86-64 sysenter

4
推荐指数
1
解决办法
1101
查看次数

标签 统计

sysenter ×3

assembly ×2

kernel ×2

system-calls ×2

32-bit ×1

linux ×1

windows ×1

x86-64 ×1