用汇编写特殊要求的strlen

题目:

不允许调用库函数,也不允许使用任何全局或局部变量编写 int strlen(char *strDest);

用汇编的实现:

  1. int strlen(const char *s)
  2. {
  3.     __asm__ __volatile__("movl %%esi,%%eax;0:testb $0xFF,(%%eax);"
  4.                         "jz 1f;inc %%eax;jmp 0b;"
  5.                         "1:subl %%esi,%%eax;"::"S"(s));
  6. }

(gcc 3.3.1)

时间: 2024-11-18 16:00:30

用汇编写特殊要求的strlen的相关文章

简易软盘镜像工具的实现及操作系统编写初步

摘要 本文给出了软盘镜像生成工具的实现,并用其把自己编译生成的引导 文件制作成软盘镜像,写入软盘实现一个简单操作系统的引导. 关键词 软盘镜像工具 操作系统引导. 为了深入的了解80X86计算机的内部原理 ,参照别人的程序用汇编写了几个小程序.但生成软盘镜像的工具大都是DOS版 本的,于是就想自己用VC也实现一个,并用把自己的引导程序写入软盘上验证一 下. 1.镜像工具的基本原理 镜像工具读取磁盘上的文件,然后 安装一定的格式生成软盘镜像文件,最后把软盘镜像文以512字节扇区为单位, 写入软盘上

用Delphi编写蠕虫病毒浅析

前言: 可能大家想到病毒,第一反应就是可能是用asm来编写,或者是vbsript,而高级语言如delphi就好象不能编写一样,其实事实并不是这个样子的,只要我们花一些时间,照样可以写出简短而高效的病毒程序来,一点也不输那些用汇编写出来的程序哦. 一个病毒程序首先要短小,我们的目标是经过压缩后控制在30k以下.用过delphi的朋友都知道,如果在uses里面加入forms,classes.....等就会使目标文件非常的大,所以,在我们的程序里,我们要尽可能的不用这些库.我们只用windows,wi

编写一个单片机程序,通过一个钮子开关K1控制八只发光二极管的两种不同状态。

问题描述 编写一个单片机程序,通过一个钮子开关K1控制八只发光二极管的两种不同状态. 用AT89C51来完成实验.要求:1.使用P3口作为信号输入口,P1口作为信号输出口.2.若开关节K1接高电平时,八只二极管均处于点亮状态,并持续10秒,开关接低电平时,八只二极管处于交叉两灭状态,并持续5秒3.编写程序的首地址设为4000H. 解决方案 你这个是上课作业吧? 解决方案二: 要用汇编写程序啊...头痛..很久没用汇编了.. 解决方案三: 先画好流程图,用C语言编好程序,用keil编译,通过后就把

如何编写Linux设备驱动程序_unix linux

    Linux是Unix操作系统的一种变种,在Linux下编写驱动程序的原理和思想完全类似于其他的Unix系统,但它dos或window环境下的驱动程序有很大的区别.在Linux环境下设计驱动程序,思想简洁,操作方便,功能也很强大,但是支持函数少,只能依赖kernel中的函数,有些常用的操作要自己来编写,而且调试也不方便.本人这几周来为实验室自行研制的一块多媒体卡编制了驱动程序,获得了一些经验,愿与Linux fans共享,有不当之处,请予指正. 以下的一些文字主要来源于khg,johnso

[转贴]利用伪造内核文件来绕过IceSword的检测

[转贴]利用伪造内核文件来绕过IceSword的检测   作者:倪茂志邮件:backspray008@gmail.com完成于:2005.12.20 文章分为八个部分:   一.为什么需要伪造内核  二.伪造内核文件  三.隐藏进程  四.隐藏内核模块  五.隐藏服务  六.隐藏注册表  七.隐藏文件  八.关于端口 另:建议先看看最后那些参考文章. 一.为什么需要伪造内核:   I

从汇编看编程语言

在学校的时候,不知怎么的机缘巧合就结识了汇编语言,但到找工作时却选择了Vc++.不过到现在,偶还是对汇编有种难以割舍的情怀.虽然现在是本人在搞C#,然对我影响最深的还是汇编. 偶在大二的时候就用汇编写了一个飞机打字符的游戏,可惜由于自己的原因,到毕业时,除了汇编什么也不会.找做单片机和嵌入式的学历不够.碰着就碰到了VC++里.在工作做慢慢的从Vc++转到了C#,不过决定学习c#的过程并不平坦.偶不想放弃以学的C++,想用C++托管扩展进行编程.但发现.c++托管编程并不适合公司里快速开发项目的要

汇编源代码之硬盘保护锁

我在前一段时间写了一个硬盘锁,拿出来和大家交流交流,同时有个问题,希望大家能帮我想想. 首先,大略介绍一下我的程序,我是用汇编写成,程序有2个文件:hdlock.exe hdlock.dat ,其中hdlock.dat是我写的用于装入硬盘0柱0道1扇的硬盘锁,hdlock.exe实现 (1)把hdlock.dat装入硬盘0柱0道1扇并设置硬盘锁的密码,(2)修改密码,(3)卸载硬盘锁 在此,先介绍一下 hdlock.dat,因为硬盘锁本身受空间限制,必须严格控制在1bdH字节内,(知道为什么吗?

学写基于对话框的程序

用汇编写基于对话框的程序,可以和写VB程序一样清晰简单,并且相当多的程序都是这样的结构.用VB写的所以程序几乎都是这样的 .设计程序界面 和在VC中一样,界面(对话框已经各种控件)一般是以资源的方式存在的.编辑资源文件完全可以使用VC的资源编辑器.但是熟悉 一下资源文件的写法及意义是编程所必须的.下面是一个资源文件的例子: #include "\masm32\include\resource.h"#define IDC_EDIT 3000#define IDC_BUTTON 3001#

Win32 Asm教程

这是我的Win32汇编教程.它总是在创建中,我会不停地添加内容.通过上面的next和prev链接,你可以转到后面和前面一页. 导言 先来对这个教程做个小小的介绍.Win32Asm不是一个非常流行的编程语言,而且只有为数不多(但很好)的教程.大多数教程都集中在编程的win32部分(例如,WinAPI,标准Windows编程技术的使用等),而不是汇编语言本身,例如伪代码(opcodes),寄存器(registers)的使用等.虽然你能在其他教程中找到这些内容,但那些教程通常是解释Dos编程的.它当然