nasm 汇编linux定时器或睡眠

2024-02-11

我正在尝试找到一种方法让我的代码在继续之前等待两秒钟。我在保护模式下使用Linux的nasm,所以我只能使用int 80h。我找到了一个syscall称为“alarm” (27) 另一个叫“pause“ (29)。但是,当我尝试使用这些时,程序会等待并完成,而不是继续执行。我还发现了另一个syscall,sigaction,它改变了信号的行为(所以我认为它可以用来让程序忽略alarm生成的信号而不是退出),但我不太明白sigaction是如何工作的。谢谢你的帮助。 有用的链接:http://man7.org/linux/man-pages/man2/alarm.2.html http://man7.org/linux/man-pages/man2/alarm.2.html http://man7.org/linux/man-pages/man2/sigaction.2.html http://man7.org/linux/man-pages/man2/sigaction.2.html


有一个系统调用可以让程序休眠,sys_nanosleep http://linux.die.net/man/2/nanosleep:

 sys_nanosleep : eax = 162, ebx = struct timespec *, ecx = struct timespec *

this struct timespec结构有两个成员:

 ;; This is for 32-bit.  Note that x86-64 uses 2x 64-bit members
tv_sec   ; 32 bit seconds
tv_nsec  ; 32 bit nanoseconds

该结构可以在 nasm 中声明为:

section .data

  timeval:
    tv_sec  dd 0
    tv_usec dd 0

然后设置值并将其称为:

mov dword [tv_sec], 5
mov dword [tv_usec], 0
mov eax, 162
mov ebx, timeval
mov ecx, 0
int 0x80

然后程序将休眠 5 秒钟。一个完整的例子:

global  _start

section .text
_start:

  ; print "Sleep"
  mov eax, 4
  mov ebx, 1
  mov ecx, bmessage
  mov edx, bmessagel
  int 0x80

  ; Sleep for 5 seconds and 0 nanoseconds
  mov dword [tv_sec], 5
  mov dword [tv_usec], 0
  mov eax, 162
  mov ebx, timeval
  mov ecx, 0
  int 0x80

  ; print "Continue"
  mov eax, 4
  mov ebx, 1
  mov ecx, emessage
  mov edx, emessagel
  int 0x80

  ; exit
  mov eax, 1
  mov ebx, 0
  int 0x80

section .data

  timeval:
    tv_sec  dd 0
    tv_usec dd 0

  bmessage  db "Sleep", 10, 0
  bmessagel equ $ - bmessage

  emessage  db "Continue", 10, 0
  emessagel equ $ - emessage
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nasm 汇编linux定时器或睡眠 的相关文章

  • 如何使用sprof?

    请举例说明 从邮件中找到here http sources redhat com ml libc alpha 2003 07 msg00029 html and here http sourceware org ml binutils 20
  • 是否有我可以运行的操作系统命令来确定是否在基于 Xen 的虚拟机内运行

    我可以在基于 Xen 的虚拟机中运行一个操作系统命令来告诉我它是一个虚拟机而不是物理机 我听说内核对此有一些自我意识智能 例如就像 ps 输出中的额外列之类的 我知道 vmstat 提供了 st 列 但我在运行 Linux 内核 2 6 1
  • 在Linux伪终端中执行从一个终端发送到另一个终端的字符串

    假设我有一个终端 其中 tty 的输出是 dev pts 2 我想从另一个终端向第一个终端发送命令并执行它 使用 echo ls gt dev pts 2 仅在第一个终端中打印 ls 有没有办法执行字符串 不 终端不执行命令 它们只是数据的
  • Nasm 打印到下一行

    我用 nasm Assembly 编写了以下程序 section text global start start Input variables mov edx inLen mov ecx inMsg mov ebx 1 mov eax 4
  • 定时器启动/停止参数

    自从加入这个社区以来 我在技能和进步方面取得了突飞猛进的进步 你们都是一个巨大的帮助 我无法提供一个计时器 该计时器已在启动和停止时实现了某些参数 我要么收到错误消息 局部变量计时器可能尚未初始化 要么没有收到错误消息 但什么也没有发生 也
  • 跟踪 pthread 调度

    我想做的是创建某种图表 详细说明 Linux 中 两个 线程的执行情况 我不需要查看线程的作用 只需查看它们何时被安排以及持续多长时间 基本上是一条时间线 在过去的几个小时里 我一直在互联网上搜索跟踪 pthread 调度的方法 不幸的是
  • jpackage linux 创建的桌面文件不足

    我刚刚开始使用 jpackage 它是一个非常棒的工具 只要迈出一步 我的肩上的工作就减轻了很多 我对看起来硬编码且无法定制的东西越感到惊讶 JPackage 自动生成启动器 lib
  • 使用 C++ 输出字符串覆盖 Linux 终端上的最后一个字符串

    假设我有一个命令行程序 有没有办法让我说的时候 std cout lt lt stuff 如果我不做std cout lt lt n 在另一个之间std cout lt lt stuff 东西的另一个输出将覆盖同一行上的最后一个东西 清理行
  • 如何使用libaudit?

    我试图了解如何使用 libaudit 我想接收有关使用 C C 的用户操作的事件 我不明白如何设置规则 以及如何获取有关用户操作的信息 例如 我想获取用户创建目录时的信息 int audit fd audit open struct aud
  • 使用netcat将unix套接字传输到tcp套接字

    我正在尝试使用以下命令将 unix 套接字公开为 tcp 套接字 nc lkv 44444 nc Uv var run docker sock 当我尝试访问时localhost 44444 containers json从浏览器中 它不会加
  • 在 Ubuntu 上纯粹通过 bash 脚本安装 mysql 5.7

    我想要一个无需任何手动输入即可安装 MySQL 5 7 实例的 bash 脚本 我正在关注数字海洋教程 https www digitalocean com community tutorials how to install mysql
  • “rep stos”x86 汇编指令序列有什么作用?

    我最近偶然发现了以下汇编指令序列 rep stos dword ptr edi For ecx重复 存储内容eax到哪里edi指向 递增或递减edi 取决于方向标志 每次 4 个字节 通常 这用于memset型操作 通常 该指令简单地写成r
  • 静态链接共享对象?或者损坏的文件?

    我有一个从专有来源获得的库 我正在尝试链接它 但出现以下错误 libxxx so 文件无法识别 文件格式无法识别 Collect2 ld 返回 1 退出状态 确实 ldd libxxx so statically linked 这究竟意味着
  • 在中断时获取 current->pid

    我正在Linux调度程序上写一些东西 我需要知道在我的中断到来之前哪个进程正在运行 当前的结构可用吗 如果我在中断处理程序中执行 current gt pid 我是否可以获得我中断的进程的 pid 你可以 current gt pid存在并
  • 从 NASM 调用 C 函数 _printf 会导致分段错误

    我一直在尝试使用 NASM 在 Mac OS 和 Windows 上学习 64 位汇编 我的代码是 extern printf section data msg db Hello World 10 0 section text global
  • 通过 SSH 将变量传递给远程脚本

    我正在通过 SSH 从本地服务器在远程服务器上运行脚本 首先使用 SCP 复制该脚本 然后在传递一些参数时调用该脚本 如下所示 scp path to script server example org another path ssh s
  • UDP 广播发送失败:在 Linux 2.6.30 上“网络无法访问”

    我用udp广播写了一个程序 代码段如下 struct sockaddr in broadcast addr socklen t sock len sizeof broadcast addr bzero broadcast addr sock
  • 远程linux服务器到远程linux服务器大型稀疏文件复制 - 如何?

    我有两台 CentOS 5 4 服务器 每台服务器上都安装了 VMware Server 假设我始终对 vmware 虚拟机使用稀疏文件 将虚拟机文件从一台服务器复制到另一台服务器的最可靠 最快速的方法是什么 虚拟机的文件复制起来很痛苦 因
  • 如何仅将整个嵌套目录中的头文件复制到另一个目录,在复制到新文件夹后保持相同的层次结构

    我有一个目录 其中有很多头文件 h 和其他 o 和 c 文件以及其他文件 这个目录里面有很多嵌套的目录 我只想将头文件复制到一个单独的目录 并在新目录中保留相同的结构 cp rf oldDirectory newDirectory将复制所有
  • grails 上的同步块在 Windows 上有效,但在 Linux 上无效

    我有一个 grails 应用程序 它依赖于服务中的同步块 当我在 Windows 上运行它时 同步按预期工作 但当我在 ams linux 上运行时 会出现 StaleObjectStateException 该问题在以下示例中重现 cla

随机推荐

  • 如何使用 Python 查找我的数据属于哪个集群?

    我刚刚对我的数据运行了 PCA 然后运行了 K 均值聚类算法 运行算法后我得到了 3 个聚类 我试图找出我的输入属于哪些集群 以便收集有关输入的一些定性属性 我的输入是客户 ID 用于聚类的变量是某些产品的支出模式 下面是我为 K 均值运行
  • 使用 OpenCV 混合多个图像

    使用python与OpenCV混合多个图像的方法是什么 我遇到了以下片段 img cv2 addWeighted mountain 0 3 dog 0 7 0 on https docs opencv org 3 4 d5 dc4 tuto
  • 在 Windows JRE 中导入 StartCom CA 证书

    我有一个 Java 应用程序访问使用 StartCom SSL 证书的服务 为此 我需要将 StartCom CA 证书添加到 Java 的信任库中 因为默认情况下它们还不在那里 我已经使用这些命令在 Linux 上成功完成了此操作 sud
  • 在 TypeScript 中覆盖接口的属性

    我知道禁止在扩展接口中覆盖接口的属性 修改其类型 我正在寻找一种替代解决方案 该解决方案允许我不复制第一个界面的内容 它非常大 下面是我的第一个天真的方法 鉴于该基本接口 interface OrginalInterface title s
  • 如何在Cloud Firestore中完成WHERE IN查询[重复]

    这个问题在这里已经有答案了 我试图弄清楚如何根据值是否位于我客户端的数组中来返回查询 到目前为止我还没有发现任何关于这个问题的信息 这可能吗 Firestore 现在支持 IN 查询 公告 https firebase googleblog
  • Hibernate:排序多对多映射

    考虑以下带有 JPA 注释的映射 ManyToMany cascade CascadeType ALL JoinTable name infotype validations joinColumns JoinColumn name info
  • 关闭按钮的背光

    我正在开发一个可能在晚上使用的 Android 应用程序 因此 我需要关闭按钮的背光 我怎样才能做到这一点 在我自己的手机上 背光会在一段时间后关闭 但在摩托罗拉 Droid 上 我认为不会发生这种情况 我正在使用唤醒锁来保持屏幕打开 我应
  • 如何在普通表和 fts3 表之间创建触发器?

    我在 FTS3 表和普通数据库表之间切换时遇到问题 我的应用程序非常简单 允许用户将联系人添加到数据库 他们可以搜索与搜索查询匹配的联系人 为什么我使用 fts 表 然后将结果显示在带有 onItemclicklistener 的列表上 但
  • 使用 PACKET_MMAP 和 PACKET_TX_RING 发送数据比“正常”(不使用)慢

    我正在用 C 语言编写一个流量生成器 使用 PACKET MMAP 套接字选项来创建环形缓冲区以通过原始套接字发送数据 环形缓冲区充满了要发送和发送的以太网帧sendto叫做 环形缓冲区的全部内容通过套接字发送 这应该比在内存中拥有缓冲区并
  • 如何使用refresh_token获取新的access_token(使用Flask-OAuthLib)?

    我正在构建一个网站 后端Flask框架 http flask pocoo org 我在其中使用Flask OAuthlib https flask oauthlib readthedocs org en latest 与谷歌进行身份验证 身
  • 在 Twitter API 中使用正则表达式

    我正在使用 Python 中的 Tweepy 库来搜索推文 我想知道是否可以使用正则表达式来搜索推文 我正在使用以下代码 query ARNOLD or SYLVESTER for tweet in tweepy Cursor api se
  • 缓存 Android 中 MapView 上正在绘制的内容

    我正在为我的大学校园开发一个应用程序 该应用程序在 MapView 中显示校园 然后使用geopoints在mapView上使用draw方法绘制校园建筑物的轮廓 该类延伸Overlay http code google com androi
  • EntityGraph - 您必须在描述符处定义提取组管理器才能在查询上设置提取组

    我想在 EclipseLink 和 GlassFish 中使用实体图 Entity NamedQueries NamedQuery name invoice all query SELECT i FROM Invoice i NamedEn
  • kubectl 端口转发多个服务

    我一直在尝试使用以下命令转发多个端口 kubectl port forward deployment service1 8080 8080 kubectl port forward deployment service2 8081 8081
  • 未找到“属性”段的资源

    当使用 ADO Net Data Services 客户端通过调用刷新实体时LoadProperty ctx BeginLoadProperty this Owner IAsyncResult ar gt 如果该属性是 它会在服务器上引发错
  • 工作流程中的 Dynamics CRM 当前日期占位符

    我已将工作流程附加到具有到期日期和时间的实体 那么指示当前时间的适当占位符是什么 CURRENT TIME Sultan 您的问题有点模糊 但如果您通过编辑器谈论 Dynamics CRM 工作流程 则工作流程运行的时间就是执行时间 为此
  • 无法将字符串转换为 pandas 中的浮点数(ValueError)

    我有一个从 JSON 输出创建的数据框 如下所示 Total Revenue Average Revenue Purchase count Rate Date Monday 1 304 40 CA 20 07 CA 2 345 1 54 存
  • 如何在 Python 中从给定 CDF 的分布中采样

    我想从概率分布中抽取样本CDF https en wikipedia org wiki Cumulative distribution function 1 e x 2 python scipy 等中有没有方法 使您能够从仅给定 CDF 的
  • Django 到底什么时候运行查询?

    虽然我了解 Django 的 QuerySet 和延迟执行的高级思想 但我没有在 Django 3 1 2 源代码中看到查询执行是如何触发的 即 数据库被命中 例如 根据Django 文档 https docs djangoproject
  • nasm 汇编linux定时器或睡眠

    我正在尝试找到一种方法让我的代码在继续之前等待两秒钟 我在保护模式下使用Linux的nasm 所以我只能使用int 80h 我找到了一个syscall称为 alarm 27 另一个叫 pause 29 但是 当我尝试使用这些时 程序会等待并