[HGAME 2022 week1]easyasm

考点: XOR ASM C++

 1.汇编代码的分析

 

push ax 是一条汇编指令,它将 ax 寄存器的值压入堆栈。下面是对这条指令的详细解释:

assembly
Copy code

seg003:001E 50       push    ax      ; 将 ax 寄存器的值压入堆栈


push ax: 将 ax 寄存器的内容(16位值)推送到堆栈的栈顶。
在堆栈中,数据是以先进后出(LIFO,Last In, First Out)的方式存储的,这意味着最后压入堆栈的数据会成为第一个弹出的数据。

这条指令在这段代码中的作用是保存 ax 寄存器的当前值,以便稍后从堆栈中弹出并使用。在这个上下文中,ax 寄存器的值在进行一系列移位、逻辑运算后被推入堆栈,可能是为了在后续的指令中使用或与其他值进行比较。

如果你之后在代码中看到了 pop 指令,那么它可能会用于从堆栈中弹出之前保存的 ax 寄存器的值。

在 push ax 之前,ax 寄存器中的值应该是通过对变量 i 所指向的内存位置中的字节进行左移操作得到的结果

完全分析之后脚本只需要反着来就行了

exp

  #include<bits/stdc++.h>
  using namespace std;
  
  int main()
  {
unsigned char ida_chars[] ={
  0x91, 0x61, 0x01, 0xC1, 0x41, 0xA0, 0x60, 0x41, 0xD1, 0x21, 
  0x14, 0xC1, 0x41, 0xE2, 0x50, 0xE1, 0xE2, 0x54, 0x20, 0xC1, 
  0xE2, 0x60, 0x14, 0x30, 0xD1, 0x51, 0xC0, 0x17};


  for ( int i = 0; i <28 ; ++i )
  {
  		
  		ida_chars[i]^=23;

  		int tmp=(ida_chars[i]<<4);
  		
		printf("%c",tmp+(ida_chars[i]>>4));
  }
  
  
  
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值