首页 > 其他 > 详细

nasm astrcspn函数 x86

时间:2020-09-26 18:11:39      阅读:31      评论:0      收藏:0      [点我收藏+]

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\n", strcspn(str1,  str2)); // 4
  printf("%d\n", astrcspn(str1, str2)); // 4
  return 0;
}

nasm astrcspn函数 x86

原文:https://www.cnblogs.com/ajanuw/p/13734784.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!