堆栈相关指令练习

  • 使用3种方式实现push ecx

1.
MOV DOWRD PTR SS:[ESP-4], ECX
SUB ESP, 4
2.
LEA EAX, DWORD PTR SS:[ESP-4]
MOV DWORD PTR DS:[EAX], ECX
MOV ESP, EAX
3.
MOV DWORD PTR SS:[ESP-4], ECX
MOV ESP, DWORD PTR SS:[ESP-4] 
  • 使用3种方式实现pop ecx

1.
MOV ECX, DWORD PTR SS:[ESP]
ADD ESP, 4
2.
LEA EAX, DWORD OTR SS:[ESP]
ADD ESP, 4
MOV ECX, DWORD PTR DS:[EAX]
3.
MOV ECX, DWORD PTR SS:[ESP]
MOV ESP, DWORD PTR SS:[ESP+4]
  • 使用3种方式实现push esp

1.
MOV DWORD PTR SS:[ESP-4], ESP
SUB ESP, 4
2.
LEA EAX, DWORD PTR SS:[ESP-4]
MOV DWORD PTR DS:[EAX], ESP
MOV ESP, EAX
3.
MOV EAX, ESP
SUB ESP, 4
MOV DWORD PTR DS:[ESP], EAX
  • 使用3种方式实现pop esp

1.
MOV ESP, DWORD PTR SS:[ESP]
2.
LEA EAX, DWORD PTR SS:[ESP]
MOV ESP, DWORD PTR DS:[EAX]
# 最后两种方式比较有趣
3.
MOV EAX, DWORD PTR SS:[ESP]
XOR EAX, DWORD PTR SS:[ESP]
XOR ESP, EAX
4.
MOV EAX, DWORD PTR SS:[ESP]
XOR EAX, DWORD PTR SS:[ESP]
XOR EAX, DWORD PTR SS:[ESP]
MOV ESP, DWORD PTR DS:[EAX] 

总结: 一条汇编指令可由其他指令组合实现,不局限于一种表现形式,编译器不同其生成的汇编代码也不尽相同。

你可能感兴趣的:(堆栈相关指令练习)