nasm astrcmp函数 x86
xxx.asm:
%define p1 ebp+8
%define p2 ebp+12
%define p3 ebp+16
section .text
  global dllmain
  export astrcmp
dllmain:
  mov eax,1
  ret 12
astrcmp:
  push ebp
  mov ebp,esp
  push ebx
  mov eax,[p1]	; char ptr 1
  mov ecx,[p2]	; char ptr 2
  .for:
  mov dl,[eax]
  mov bl,[ecx]
  cmp dl,bl
  jc .r1
  jne .r3
  test dl,bl
  jz .r2
  inc eax
  inc ecx
  jmp .for
  ;-----------------------------------------------------;
  ; <0 第一个不匹配的字符在ptr1中的值比在ptr2中的值低
  ;-----------------------------------------------------;
  .r1:
  xor eax,eax
  not eax
  jmp .return
  ;-----------------------------------------------------;
  ; 0 两个字符串的内容相等
  ;-----------------------------------------------------;
  .r2:
  xor eax,eax
  jmp .return
  ;-----------------------------------------------------;
  ; >0 第一个不匹配的字符在ptr1中的值大于在ptr2中的值
  ;-----------------------------------------------------;
  .r3:
  mov eax,1
  jmp .return
  .return:
  pop ebx
  mov esp,ebp
  pop ebp
  ret 8
c++:
#include <iostream>
#include <Windows.h>
typedef int(CALLBACK* astrcmp_t)(const char* str1, const char* str2);
astrcmp_t astrcmp;
int main()
{
  HMODULE myDLL = LoadLibraryA("xxx.dll");
  astrcmp = (astrcmp_t)GetProcAddress(myDLL, "astrcmp");
  printf("%x\n",  astrcmp("12", "22")); // -1
  printf("%x\n",  astrcmp("12", "12")); // 0
  printf("%x\n",  astrcmp("22", "12")); // 1
  return 0;
}
nasm astrcmp函数 x86的更多相关文章
- nasm astrspn函数 x86
		xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ... 
- nasm astrcspn函数 x86
		xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ... 
- nasm astrchr函数 x86
		xxx.asm: %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export as ... 
- nasm astrlen函数 x86
		xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ... 
- nasm aat函数 x86
		xxx.asm: %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain dllmain: ... 
- nasm astrstr函数 x86
		xxx.asm: %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export as ... 
- nasm astrset_s函数 x86
		xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ... 
- nasm astrrev函数 x86
		xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ... 
- nasm astrrchr函数 x86
		xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ... 
随机推荐
- CAP理论解读
			经历过技术面试的小伙伴想必对这个两个概念已经再熟悉不过了! 我当年参加面试的时候,不夸张地说,只要问到分布式相关的内容,面试官几乎是必定会问这两个分布式相关的理论. 并且,这两个理论也可以说是小伙伴们 ... 
- P1046 陶陶摘苹果   Python实现
			题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出1010个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个3030厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 现在 ... 
- linux(10)linux vi/vim
			前言 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是vim编辑器. vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的 ... 
- HDU - 2328 Corporate Identity(kmp+暴力)
			传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2328 题意:多组输入,n==0结束.给出n个字符串,求最长公共子串,长度相等则求字典序最小. 题解:(居 ... 
- hdu 6867 Tree  2020 Multi-University Training Contest 9    dfs+思维
			题意: 给你一个由n个点,n-1条有向边构成的一颗树,1为根节点 下面会输入n-1个数,第i个数表示第i+1点的父节点.你可以去添加一条边(你添加的边也是有向边),然后找出来(x,y)这样的成对节点. ... 
- UESTC 1218 Pick The Sticks
			Time Limit: 15000/10000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Status ... 
- 001、Python数据结构
			#! usr/bin/env python # _*_ coding:utf-8 _*_ from random import randint ''' 一.list的增删改查 1.list.appen ... 
- BKDR字符串哈希
			BKDR字符串哈希 bkdrhash冲突的可能性非常小,但是由于\(hash\)值非常大不能映射到哈希数组地址上,所以可以通过取余,用余数作为索引地址.但这样做造成了可能的地址冲突. #include ... 
- Kafka SASL/SCRAM+ACL实现动态创建用户及权限控制
			kafka系列文章 第一章 linux单机安装kafka 第二章 kafka--集群安裝部署(自带zookeeper) 第三章 Kafka SASL/SCRAM+ACL实现动态创建用户及权限控制 Ka ... 
- LVS+Keepalived深度理解,阐述你不知道的坑点
			1. LVS简介 1. 什么是LVS? LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内 ... 
