assembly - 如何在不创建新函数的情况下反转汇编中的堆栈
问题描述
我现在面临的问题是反转我的堆栈。
我能够更改我想要的符号,但我被困在反转我的堆栈上。
到目前为止,这是我的代码:
section .text
global do_Str
extern printf
do_Str:
push rbp
mov rbp, rsp
mov rcx, rdi
mov rbx, rdi
mov rdx, rcx
mov r10, 0
mov r9, 0
label:
cmp byte[rcx], 'a'
jl cont
cmp byte[rcx], 'z'
jg cont
and byte [rcx], 11011111b
cont:
cmp byte[rcx], '('
jne contP
mov byte[rcx], '<'
contP:
cmp byte[rcx], ')'
jne contR
mov byte[rcx], '>'
contR:
cmp byte[rcx],'A'
jl contL
cmp byte[rcx], 'Z'
jg contL
inc r9
contL:
_push_loop:
mov al,[rdx]
cmp al, 0
jz _pop_loop
push ax
inc rdx
jmp _push_loop
_pop_loop:
mov al,[rbx]
cmp al,0
jz _done
pop ax
mov [rdx], al
inc rbx
jmp _push_loop
_done:
inc r10
inc rcx
cmp byte [rcx], 0
jnz label
sub r10, r9
mov rax, r10
mov rsp, rbp
pop rbp
ret
我尝试更改我的寄存器和指针使用,但所有这些都导致了相同的错误:
Segmentation fault (core dumped)
我不允许在我的 C 文件中创建新函数
这是我的 C 代码:
#include <stdio.h>
#define MAX_LEN 100
extern int do_Str (char*);
int main(void){
char str_Buf[MAX_LEN];
int counter = 0;
fgets(str_Buf,MAX_LEN, stdin);
counter = do_Str (str_Buf);
printf("%s%d\n",str_Buf,counter);
return 0;
}
我在 Stack Overflow 上搜索过它,但没有找到解决我的问题的方法。
完整的任务是: 1. 将输入的小写字母更改为大写 2. 计算有多少字符不是字母 3. 反转输入 - 我被困在这里,我想我没有完全意识到堆栈的流程。
解决方案
推荐阅读
- java - 通过 put 请求传递 json 时在后端接收具有 null 属性的对象
- reactjs - 无法通过本地网络访问 create-app-react 应用程序
- c++ - 在 Arduino 中的 setup() 之外调用构造函数的问题
- ios - 推送 ABPersonViewController 时应用程序在 iOS 13 中崩溃
- python - 比较张量流中的张量
- tensorflow - 张量流估计器保存模型
- html - 试图制作一个 svg-image 来显示。无法找出为什么它不
- sass - 父级前置 SCSS
- python-3.x - 在地图中添加修复参数 - Python
- node.js - 为 twilio flex 插件安装软件包时出现 NPM 错误