注册 登录
编程论坛 汇编论坛

汇编中怎么样才可以写出像__declspec(nake)那样的函数

Otoboku 发布于 2012-03-27 21:51, 731 次点击
我使用ML是
Microsoft (R) Macro Assembler Version 6.14.8444
有些需要需要写一些完全控制的函数过程,换句话说,过程中不能有自动生成的任何代码
下边是我写的一个函数,要求连push eax都不能有
TestProc1 proc uses eax
    jmp TestProc
TestProc1 endp



7 回复
#2
Otoboku2012-03-27 22:09
乱搞找到方法了,直接call 行号就ixng
#3
zklhp2012-03-28 09:50
uses eax 会自动生成push pop来保护寄存器

如果写成函数也会自动生成堆栈处理的代码段

你这个call行号的方法不错 呵呵
#4
zklhp2012-03-28 09:52
还有 我发现你的标题貌似有错。。
#5
zklhp2012-03-28 09:53
__declspec(naked)
#6
GoldenSpider2012-04-06 11:22
程序代码:
OPTION PROLOGUE:NONE
OPTION EPILOGUE:NONE

    align 16

arrget proc arr:DWORD,indx:DWORD

    mov eax, [esp+4]         ; write array adress to EAX
    mov ecx, [esp+8]         ; write required index to ECX

    mov eax, [eax+ecx*4]     ; write array member address to EAX
    ret 8

arrget endp

OPTION PROLOGUE:PrologueDef
OPTION EPILOGUE:EpilogueDef

还有更简单,更自由的形式(个人比较喜欢):
程序代码:
    align 16
arrget:
    mov eax, [esp+4]         ; write array adress to EAX
    mov ecx, [esp+8]         ; write required index to ECX

    mov eax, [eax+ecx*4]     ; write array member address to EAX
    ret 8

以上对函数arrget的调用是一样的。
#7
zklhp2012-04-06 19:15
以下是引用GoldenSpider在2012-4-6 11:22:57的发言:

OPTION PROLOGUE:NONE
OPTION EPILOGUE:NONE
 
    align 16
 
arrget proc arr:DWORD,indx:DWORD
 
    mov eax, [esp+4]         ; write array adress to EAX
    mov ecx, [esp+8]         ; write required index to ECX
 
    mov eax, [eax+ecx*4]     ; write array member address to EAX
    ret 8
 
arrget endp
 
OPTION PROLOGUE:PrologueDef
OPTION EPILOGUE:EpilogueDef
还有更简单,更自由的形式(个人比较喜欢):    align 16
arrget:
    mov eax, [esp+4]         ; write array adress to EAX
    mov ecx, [esp+8]         ; write required index to ECX
 
    mov eax, [eax+ecx*4]     ; write array member address to EAX
    ret 8
以上对函数arrget的调用是一样的。
膜拜大牛
#8
于祥2012-04-07 12:43
回复 6楼 GoldenSpider
厉害
1