从命令行(ubuntu nasm 32bit)获取字符串时,如何将字符串转换为整数?

时间:2018-12-02 16:34:03

标签: assembly x86 nasm

%include "asm_io.inc"

                 segment .data
                 segment .bss
argument         resb 32                    ; argument[32]


                 segment .text
                 global main
main:

                 enter 0,0

                 mov ebx, 4
                 mov ecx, dword [ebp + 4 * ebx]
                 mov eax, dword [ecx + 4]

                 mov [argument], eax

                 mov al, byte [argument + 0]
                 sub al, 48

                 call print_int          




end:             leave
                 mov eax, 0
                 ret

我正在尝试将字符串从命令行转换为整数(例如,当我在命令行键入$。/ Hello 30时,“ 30”必须是program(procedure)的整数参数)。 在发现[argument + 0] =='30'之后,[argument + 1] = bin / bash, 我以为我可以使用[参数+ 0]得到正确的数字。 但结果就像-1075579555。

即使发表一点评论,也将非常有帮助。谢谢

1 个答案:

答案 0 :(得分:2)

程序启动时,栈的布局就这样

<div id="selected-card">
 some code here
</div>

对于您的任务,您需要获取第一个程序参数的地址。
您可以在Rails.application.routes.draw do devise_for :users root to: 'visitor_pages#posts' # root to: 'posts#index' resources :posts resources :posts do member do get :referred, :references end end end 上找到它。

在执行 0 Address of last environment string ... Address of 2nd environment string Address of 1st environment string 0 Address of last program argument ... Address of 2nd program argument Address of 1st program argument Address of program path ESP -> Number of arguments 之后,由于该指令将dword [esp + 8]寄存器压入寄存器,因此您可以在enter 0,0 == EBP处找到它。

dword [esp + 12]