zoukankan      html  css  js  c++  java
  • nasm astrcspn函数 x86

    xxx.asm

    %define p1 ebp+8
    %define p2 ebp+12
    %define p3 ebp+16
    
    section .text
      global dllmain
      export astrcspn
    
    dllmain:
      mov eax,1
      ret 12
    
    ;---------------------------------------------------;
    ; 返回属于一组字符的字符在字符串中第一次出现的索引
    ;---------------------------------------------------;
    astrcspn:
      push ebp
      mov ebp,esp
      sub esp,8
      
      mov edx,[p1]	; char ptr 1
      mov ecx,[p2]	; char ptr 2
      xor eax,eax
      
      ; 保存str2指针,和ebx寄存器
      mov [ebp-4],ecx
      mov [ebp-8],ebx
      
      ;-------------------------------------;
      ; 遍历 str1
      ;-------------------------------------;
      .forStr1:
      mov bh,[edx]
      test bh,bh
      jz .return
      
      ;-------------------------------------;
      ; 遍历str2,如果相等退出函数
      ;-------------------------------------;
      .forStr2:
      mov bl,[ecx]
      test bl,bl
      jz .forbreak
      cmp bh,bl
      je .return
      inc ecx
      jmp .forStr2
      
      .forbreak:
      mov ecx,[ebp-4]
      inc edx
      inc eax
      jmp .forStr1
      
      ;-------------------------------------;
      ; 恢复ebx寄存器,恢复堆栈
      ;-------------------------------------;
      .return:
      mov ebx,[ebp-8]
      add esp,8
      mov esp,ebp
      pop ebp
      ret 8
    

    c++:

    #include <iostream>
    #include <Windows.h>
    
    typedef size_t (CALLBACK* astrcspn_t)(const char* str1, const char* str2);
    
    astrcspn_t astrcspn;
    
    int main()
    {
      HMODULE myDLL = LoadLibraryA("xxx.dll");
      astrcspn = (astrcspn_t)GetProcAddress(myDLL, "astrcspn");
    
      const char* str1 = "fcba73";
      const char* str2 = "1234567890";
      printf("%d
    ", strcspn(str1,  str2)); // 4
      printf("%d
    ", astrcspn(str1, str2)); // 4
      return 0;
    }
    
  • 相关阅读:
    zookeeper基础
    4. Zookeeper单机版安装
    3. 服务中间件Dubbo
    2. Maven工程的搭建
    Maven的优点
    应用架构的演进历史 MVC、 RPC、SOA 和 微服务架构
    js 正则表达式验证
    后台正则表达式验证部分部分总结
    Linux下记录登录用户历史操作
    Django使用Ace实现在线编辑器
  • 原文地址:https://www.cnblogs.com/ajanuw/p/13734784.html
Copyright © 2011-2022 走看看