String 获取寄存器长度/大小?
我需要你的帮助:/ 我有一个指向一个内存地址的寄存器,如下所示:String 获取寄存器长度/大小?,string,assembly,size,ollydbg,String,Assembly,Size,Ollydbg,我需要你的帮助:/ 我有一个指向一个内存地址的寄存器,如下所示: MOV ESI,DWORD PTR SS:[00123456] 这个地址(00123456)包含一个随机字符串,比如:“你好,这是一个字符串” 我需要得到字符串的长度/大小并进行比较,如果字符串长度超过10,则需要清洁字符串 有人能帮我吗 注意:我正在使用OllyDbg直接在可执行文件中编写此asm代码,因此,MASM、TASM、NASM等中的过程将不起作用。您可以使用REPNE SCAS,这就是内在strlen所使用的。否则,
MOV ESI,DWORD PTR SS:[00123456]
这个地址(00123456)包含一个随机字符串,比如:“你好,这是一个字符串”
我需要得到字符串的长度/大小并进行比较,如果字符串长度超过10,则需要清洁字符串
有人能帮我吗
注意:我正在使用OllyDbg直接在可执行文件中编写此asm代码,因此,MASM、TASM、NASM等中的过程将不起作用。您可以使用
REPNE SCAS
,这就是内在strlen
所使用的。否则,您可以使用这样一个简单的函数(假设输入位于EAX
):
但最好检查您正在修改的二进制文件是否还没有strlen函数
完成后,您可以进行尺寸检查和可能的归零,因此您可能会以如下方式结束:
PUSHAD ;save all registers
MOV EAX,ESI ;setup the call for strlen (as defined above)
CALL strlen ;get the length of the string, strlen would be the address of the func above
MOV ECX,EAX
CMP ECX,0A ;check if the string needs to be cleared
JL L1
MOV EDI,ESI ;set the dest register to the string
REP STOS BYTE PTR [EDI] ;clear the string, alternatively MOV BYTE PTR [ESI],0
L1:
POPAD ;restore all registers
//continue
(根据您的挂钩位置,您可能还需要保留
EFLAGS
)您可以使用REPNE SCAS
,这是In固有strlen
使用的。否则,您可以使用这样一个简单的函数(假设输入位于EAX
):
但最好检查您正在修改的二进制文件是否还没有strlen函数
完成后,您可以进行尺寸检查和可能的归零,因此您可能会以如下方式结束:
PUSHAD ;save all registers
MOV EAX,ESI ;setup the call for strlen (as defined above)
CALL strlen ;get the length of the string, strlen would be the address of the func above
MOV ECX,EAX
CMP ECX,0A ;check if the string needs to be cleared
JL L1
MOV EDI,ESI ;set the dest register to the string
REP STOS BYTE PTR [EDI] ;clear the string, alternatively MOV BYTE PTR [ESI],0
L1:
POPAD ;restore all registers
//continue
(根据您的挂钩位置,您可能还需要保留
EFLAGS
)您好,请解释一下您的代码行好吗<代码>代码PUSHAD MOV EAX,ESI呼叫strlen MOV ECX,EAX CMP ECX,0A JL L1 MOV EDI,ESI代表STOS字节PTR[EDI]L1:POPAD@paulohr:添加了一些注释来解释I@Necrolis,我现在在工作,但在家里我会测试它。你能给我发电子邮件询问更多问题吗?非常感谢你!嗨,Necrolist,你能解释一下你的代码吗<代码>代码PUSHAD MOV EAX,ESI呼叫strlen MOV ECX,EAX CMP ECX,0A JL L1 MOV EDI,ESI代表STOS字节PTR[EDI]L1:POPAD@paulohr:添加了一些注释来解释I@Necrolis,我现在在工作,但在家里我会测试它。你能给我发电子邮件询问更多问题吗?非常感谢你!