问一个迷惑好久的问题

wesen1111 2008-03-22 03:17:26
;这是子程序
_GetApi proc _hModule,_lpszApi
local @dwReturn,@dwStringLength

pushad

;********************************************************************
; 计算 API 字符串的长度(带尾部的0)
;********************************************************************
mov edi,_lpszApi
mov ecx,-1
xor al,al
cld
repnz scasb
mov ecx,edi
sub ecx,_lpszApi
mov @dwStringLength,ecx

;**************************************************
请教一个问题,sub ecx,_lpszApi这两个相减是什么意思
这ecx,_lpszApi又不是偏移地址,而是两个地址里的内容
这样能计算到我所要的字符串么???
请高手帮忙回答下好么!!
...全文
52 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wesen1111 2008-03-22
  • 打赏
  • 举报
回复
谢谢楼上的大哥们的积极回答,现在偶已经完全明白了
zara 2008-03-22
  • 打赏
  • 举报
回复
在 sub 指令之前不是有个 mov ecx, edi 指令吗? 这个指令把字符串尾的地址由 edi 给了 ecx
智能卡_Snooper 2008-03-22
  • 打赏
  • 举报
回复
ecx不是从_lpszApi 开始到以0结尾的byte个数吗?
智能卡_Snooper 2008-03-22
  • 打赏
  • 举报
回复
ecx不是从,_lpszApi 开始结尾的byte个数吗?

类似于这样啊

char *p = _lpszApi ;

while( *p )
{
p++;
}

len = p - _lpszApi ;

最后一句写成
len = ( int )( ( int )p - ( int )_lpszApi );

更好。

大熊猫侯佩 2008-03-22
  • 打赏
  • 举报
回复
sub ecx,_lpszApi mean 字符串尾地址 - 首地址 从而得到字符串的长度。
BAYNPU 2008-03-22
  • 打赏
  • 举报
回复
repnz scasb:串扫描,它退出串操作条件ECX=0且zF=1
lpszApi是个字符串吧。
fxxygg 2008-03-22
  • 打赏
  • 举报
回复
repnz scasb 关键是这个指令啊.
相关推荐
发帖
汇编语言

2.1w+

社区成员

汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
帖子事件
创建了帖子
2008-03-22 03:17
社区公告
暂无公告