section .data
; 原始字符串
original_string db "Hello, World!", 0
; 密钥
key db 0x12
section .text
global _start
_start:
; 加密字符串
mov esi, original_string ; 将原始字符串的地址存入esi寄存器
mov edi, esi ; 将esi中的地址复制到edi寄存器
xor ecx, ecx ; 将ecx清零,用于遍历字符串
encrypt_loop:
; 逐个字符进行异或操作
mov al, [esi] ; 将当前字符存入al寄存器
xor al, key ; 使用密钥对当前字符进行异或操作
mov [edi], al ; 将结果存入目标地址
inc esi ; 移动到下一个字符
inc edi ; 移动到下一个目标地址
inc ecx ; 计数加1
cmp byte [esi], 0 ; 检查是否到达字符串结束标志
jnz encrypt_loop ; 如果没有到达末尾,则继续循环
; 将字符串加密后的结果打印出来
mov edx, ecx ; 将字符串长度存入edx寄存器
mov eax, 4 ; 使用sys_write系统调用
mov ebx, 1 ; 文件描述符为标准输出
mov ecx, original_string ; 存放要输出的字符串地址
int 0x80 ; 调用系统调用
; 解密字符串
mov esi, original_string ; 将加密后的字符串地址存入esi寄存器
mov edi, esi ; 将esi中的地址复制到edi寄存器
xor ecx, ecx ; 将ecx清零,用于遍历字符串
decrypt_loop:
; 逐个字符进行异或操作
mov al, [esi] ; 将当前字符存入al寄存器
xor al, key ; 使用相同的密钥对当前字符进行再次异或操作
mov [edi], al ; 将结果存入目标地址
inc esi ; 移动到下一个字符
inc edi ; 移动到下一个目标地址
inc ecx ; 计数加1
cmp byte [esi], 0 ; 检查是否到达字符串结束标志
jnz decrypt_loop ; 如果没有到达末尾,则继续循环
; 将解密后的字符串打印出来
mov edx, ecx ; 将字符串长度存入edx寄存器
mov eax, 4 ; 使用sys_write系统调用
mov ebx, 1 ; 文件描述符为标准输出
mov ecx, original_string ; 存放要输出的字符串地址
int 0x80 ; 调用系统调用
; 退出程序
mov eax, 1 ; 使用sys_exit系统调用
xor ebx, ebx ; 返回码为0
int 0x80 ; 调用系统调用