目录 汇编实现: C库常见函数 一丶汇编实现Strncpy拷贝函数 二丶loads实现Strlen操作. 三丶stos的作用 汇编实现: C库常见函数 一丶汇编实现Strncpy拷贝函数 void __asmStrncpy(char *des,char *src,int len) { __asm { mov edi,[ebp + 8]; //获取局部变量地址 des mov esi,[ebp + 0xc]; //获取局部变量地址 src mov ecx,len; //使用movs指令,需要给ec…
基础知识2 选择结构 通过判断 + 条件跳转指令来实现 循环结构 通过判断 + 条件跳转指令来实现(会有一个向上跳转的语句) 函数调用约定 C调用约定: 由外部平衡栈 标准调用约定 : 由函数内部平衡栈 对象调用约定 : 由函数内部平衡栈, 寄存器用于保存对象的首地址(就是this指针) 快速调用约定 : 由函数内部平衡栈(传参都是从右往左传递.), 用到 ecx , edx 来依次传递前两个参数. 通过 call 指令, call指令的原理是: 将call指令的下一条指令的地址压入栈中, 然后…
1.标志寄存器的第10位DF,方向标志位.在串处理指令中,控制每次操作后si,di的增减 DF=0,每次操作后,si.di添加 DF=1,每次操作后,si.di减小 我们能够用汇编语法描写叙述movsb的功能例如以下: mov es:[di],byte ptr ds:[si]   ;8086不支持这种指令,仅做描写叙述之用 假设DF=0:inc si inc di 假设DF=1:dec si dec di 能够看出,movsb的功能是将ds:si指向的内存单元中的字节送入es:di中,然后依据标…
ARM 汇编指令条件执行 在ARM模式下,任何一条数据处理指令可以选择是否根据操作的结果来更新CPSR寄存器中的ALU状态标志位.在数据处理指令中使用S后缀来实现该功能. 不要在CMP,CMN,TST或者TEQ指令中使用S后缀.这些比较指令总是会更新标志位. 在Thumb模式下,所有数据处理指令都更新CPSR中的标志位.有一个例外就是:当一个或更多个高寄存器被用在MOV和ADD指令时,此时MOV和ADD不能更新状态标志. 几乎所有的ARM指令都可以根据CPSR中的ALU状态标志位来条件执行.参见…
DF标志和串传送指令 flag的第10位是DF,方向标志位.在串处理指令中,控制si.di的递减. df = 0 每次操作后si.di递增 df = 1 每次操作后si.di递减 串传送指令 格式1: movsb 功能描述 1. ((es)*16+di) = ((ds)*16+si) 2. 如果 df=0 则: (si)=(si)+1 (di)=(di)+1 如果 df=1 则: (si)=(si)-1 (di)=(di)-1 C语言描述 // si,di 相当于C语言循环中 i,j 变量的功能…
计算机系统之汇编---IA32处理器数据格式及数据操作 IA32数据格式: Intel用术语"字"表示16位数据类型,因此.称32位数为"双字",称64位数为"四字". Char*这里指的是全部指针类型.注意:c语言新添加的long long是八字节,可是硬件IA32不支持这个类型. 寄存器(8个32位的寄存器,均以%e开头) %eax.%ecx.%edx:调用者保存(数据)寄存器.当过程p调用q.q能够覆盖这些寄存器.可是不会改变p中的数据.…
要学习一个东西首先要把概念搞清楚,以下仅仅是自己的一些关于汇编的理解. 可运行文件里的01码是机器码,机器码不等于汇编码,尽管机器码能够非常easy翻译成汇编码. 汇编码中包括非常多汇编指令.伪指令和宏指令等.这些是不能够直接在机器上执行的. 机器指令是ARM指令集和Thumb指令集这些arm硬件支持的指令集组成的. 汇编码中的伪指令和宏指令这些都是汇编语言这个级别的指令,在汇编文件编译的时候汇编编译器as会去处理这些指令.在编译期间也会对宏进行展开,类似于gcc编译的时候对C代码中的宏展开一样…
安装git后操作指令如下:可以查阅git安装使用操作指南详情git安装使用操作图示详情.note 线上可参考指南:http://www.bootcss.com/p/git-guide/   所有操作在没有push origin 之前都是本地操作 git checkout . #本地所有修改的.没有的提交的,都返回到原来的状态   1.创建文件夹 2.右键打开Git Base Here 3.本地创建库 git init git config --global user.name "XXX"…
一.源码安装Redis缓存服务 目标: 本案例要求先快速搭建好一台Redis服务器,并测试该缓存服务器: 1> 设置变量test,值为123 2> 查看变量test的值 3> 设置计数器mycounter 4> 对计数器mycounter进行增量加1操作 方案: 使用源码包安装Redis服务器,使用redis-cli客户端工具连接Redis服务器并测试缓存数据库. 使用redis-cli命令测试Redis服务时可以使用的命令列表如下表所示. 步骤: 步骤一:安装Redis服务器 1…
getfield指令表示获取指定类的实例域,并将其值压入栈顶.其格式如下: getstatic indexbyte1 indexbyte2 无符号数indexbyte1和indexbyte2构建为(indexbyte1<<8)|indexbyte2,这个值指明了一个当前类的运行时常量池索引值,指向的运行时常量池项为一个字段的符号引用. getfield字节码指令的生成函数为TemplateTable::getfield(),这些生成函数如下: void TemplateTable::getfi…
之前已经介绍了getstatic与getfield指令的汇编代码执行逻辑,这一篇介绍putstatic指令的执行逻辑,putfield将不再介绍,大家可以自己去研究,相信大家有这个实力. putstatic指令为指定类的静态域赋值.字节码指令的格式如下: putstatic indexbyte1 indexbyte2 无符号数indexbyte1和indexbyte2构建为(indexbyte1<<8)|indexbyte2,该索引所指向的运行时常量池项应当是一个字段的符号引用. 指令的模板定…
循环 字符串指令和寻址方式 循环 XOR ECX,ECX MOV ECX,15H LABEL: DEC ECX CMP ECX,0 JNE LABEL LOOP 重复循环,直到计数器的值为0,每次循环将计数器的值减1,如果计数器为0就跳转到指定地址,比如loop short 401007. LOOPZ,LOOPE 重复循环,直到零标志位Z被置为1. LOOPNZ,LOOPNE 重复循环,直到零标志位被置为0. LOOPZ, LOOPNZ指令还需要检查零标志位,只有计数器的值和零标志位Z都满足条件…
Linux常用操作指令: 常用指令 ls        显示文件或目录 -l           列出文件详细信息l(list) -a          列出当前目录下所有文件及目录,包括隐藏的a(all) mkdir         创建目录 -p           创建目录,若无父目录,则创建p(parent) cd               切换目录 touch          创建空文件 echo            创建带有内容的文件. cat              查看文…
对串的基本操作都全已经实现 对kmp,kf字符串替换等功能全都已经实现 由于时间原因.没来得及注释,希望大家参考见谅. 串操作hstring.h头文件实现 //kallen 1 #ifndef _HSTRING_H_ #define _HSTRING_H_ #include <iostream> class mString { public: mString(); void newString(const char *ms); ~mString(); bool isEmpty()const;…
现阶段php如果要操作mysql数据库 php给我们提供了3套库 1.mysql扩展库   面向过程操作 2.mysqli扩展库  面向对象操作和面向过程操作并存  安全性和效率高于mysql扩展库 3.PDO扩展库    面向对象操作 今天这篇博文主要要谈谈mysql扩展库和mysqli扩展库 主要是记录了着2套crud操作分装 以下代码段是关于mysqli扩展库关于crud操作的封装 header("Content-type:text/html;charset=utf-8"); c…
将常量压入栈的指令 aconst_null 将null对象引用压入栈iconst_m1 将int类型常量-1压入栈iconst_0 将int类型常量0压入栈iconst_1 将int类型常量1压入栈iconst_2 将int类型常量2压入栈iconst_3 将int类型常量3压入栈iconst_4 将int类型常量4压入栈iconst_5 将int类型常量5压入栈lconst_0 将long类型常量0压入栈lconst_1 将long类型常量1压入栈fconst_0 将float类型常量0压入栈…
PS:CTRL+F 输入你需要的内容,可以快速查找页面上的内容. 名称 说明 Add 将两个值相加并将结果推送到计算堆栈上. Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. Add.Ovf.Un 将两个无符号整数值相加,执行溢出检查,并且将结果推送到计算堆栈上. And 计算两个值的按位“与”并将结果推送到计算堆栈上. Arglist 返回指向当前方法的参数列表的非托管指针. Beq 如果两个值相等,则将控制转移到目标指令. Beq.S 如果两个值相等,则将控制转移到…
(11)字符串操作指令 字符串操作指令的实质是对一片连续存储单元进行处理,这片存储单元是由隐含指针DS:SI或ES:DI来指定的.字符串操作指令可对内存单元按字节.字或双字进行处理,并能根据操作对象的字节数使变址寄存器SI(和DI)增减1.2或4.具体规定如下: (1).当DF=0时,变址寄存器SI(和DI)增加1.2或4: (2).当DF=1时,变址寄存器SI(和DI)减少1.2或4. 在后面各指令中,有关变址寄存器都按上述规定进行增减,不再一一说明. 1.取字符串数据指令(Load Stri…
Docker下操作指令 以mysql为例 1.搜索镜像: #docker search mysql 2.拉取镜像 #docker pull mysql:5.7 3.加载镜像并绑定端口: #docker run --name i-mysql -v /data/mysql-db:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=pwd@2018 -d --restart=always mysql:5.7 4.进入mysql的终端: #docker…
原文地址:http://www.cnblogs.com/rollenholt/archive/2012/04/23/2466179.html 常用的文件操作指令: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目录名:os.listdir() 函数用来删除一个文件:os.remove() 删除多个目录:os.removedirs(r“c:\pyt…
DOM操作指令整理: (1) 创建新节点: createDocumentFragment() 创建一个DOM片段 creatElement() 创建一个具体的元素 creatTextNode() 创建一个文本节点 (2)添加.移除.替换.插入: appendChild()添加 removeChild() 移除 replaceChild()替换 insertBefore()  在已有的子节点前面插入一个新的子节点 (3)查找: getElementsByTagName()  通过标签名称查找 ge…
分享下php使用mysqli扩展库进行预处理操作的二个例子,有意研究mysqli用法的朋友,可以参考学习下,一定会有所帮助的. 例1.使用mysqli扩展库的预处理技术 mysqli stmt 向数据库添加3个用户 01 <?php 02 //mysqli扩展库 预处理技术 03 //1.创建mysqli对象 04 $mysqli = new MySQLi("localhost","root","root","test"…
Redis数据类型Strings.Lists常用操作指令 Strings常用操作指令 GET.SET相关操作 # GET 获取键值对 127.0.0.1:6379> get name (nil) # 设置失效时间的两种方式 # 设置键值对及过期时间 127.0.0.1:6379> setex name 10 enjoyitlife OK 127.0.0.1:6379> get name "enjoyitlife" # 等待10s后再次获取 127.0.0.1:6379…
一:非正确退出程序,再次启动显示端口被占用 netstat -ntulp n ---  显示ip代替网络接口信息,显示出网络连接情况 t  ---  显示TCP协议的链接状况 u ---  显示UDP协议的链接状况 p ---  显示链接程序的名称和PID l  ---  显示监听服务器的套接字 kill - 9 对应的PID号  结束相关进程 二:查看历史操作指令,这是查看故障的方法之一 history 三:用来查看登录者的信息及他们的行为 w User:登陆者用户名 TTY:登录后系统分配的…
Redis数据类型:Hashes.Geo操作指令 Hashes常用操作指令 Redis Hashes是一个键值对的映射表,最对能存储2^32-1(约40亿)个键值对. HSET HGET HSET:将键值对存储到哈希表中,如果哈希表不存在,新建一个然后在将键值对存储进去. HGET: 根据Key值获取value. 127.0.0.1:6379> ZADD sortset 1 name (integer) 1 127.0.0.1:6379> HSET myhash name zhangsan (…
Redis数据类型:Sorted Sets操作指令 Sorted Sets常用操作指令 Sorted Sets,本质是一个有序的Sets,其实在原来的Sets集合中对每一个元素新增了一个属性Score,用于排序. ZADD 将指定的元素及Score添加到集合.如果集合中存在该元素,则更新其Score. 如果集合不存在,会先创建一个集合然后在添加元素及Score. 127.0.0.1:6379> ZADD sortset 1 name (integer) 1 ZRANGE 返回指定下标开始到结束下…
Redis集合的常用操作指令 Sets常用操作指令 SADD 将指定的元素添加到集合.如果集合中存在该元素,则忽略. 如果集合不存在,会先创建一个集合然后在添加元素. 127.0.0.1:6379> SADD myset name age city (integer) 3 127.0.0.1:6379> SADD myset name (integer) 0 SMEMBERS # 查看集合 127.0.0.1:6379> SMEMBERS myset 1) "name"…
CentOS + Nginx 的常用操作指令总结 一. 关于CentOS 查看 yum 源是否存在 yum list | grep nginx 如果不存在 或者 不是自己想要的版本 可以自己设置Nginx的源 用vim 打开 (没有会自己创建) vim /etc/yum.repos.d/nginx.repo 写入如下代码 (官方提供的放心用) [nginx] name=nginx repo baseurl=http://nginx.org/packages/OS/OSRELEASE/$basea…
修改最后一次提交 有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了.想要撤消刚才的提交操作,可以使用--amend 选项重新提交: 1 $ git commit --amend -m"修改 提交 说明" 此命令将使用当前的暂存区域快照提交.如果刚才提交完没有作任何改动,直接运行此命令的话,相当于有机会 重新编辑提交说明,但将要提交的文件快照和之前的一样. 启动文本编辑器后,会看到上次提交时的说明,编辑它确认没问题后保存退出,就会使用新的提交说明覆盖刚才失误的提交. 如果…
目录 王爽汇编第五章,[bx]和loop指令 [bx]和loop指令 例子: 王爽汇编第五章,[bx]和loop指令 [bx]和loop指令 [bx]之前我们介绍寄存器的时候,已经很详细的说明过了,bx是偏移寄存器用来索引,那么加上[]表示他是一个内存单元,段地址在ds寄存器中,偏移地址在bx中,计算方式:ds*16 + bx looploop指令是一个循环指令,他的指令格式是loop 标号,CPU执行loop指令的之后,要进行两个步骤: (cx) = (cx) - 1 判断cx的值,不为0则转…