История изменений
Исправление alysnix, (текущая версия) :
push %rbp
mov %rsp, %rbp
movq $111, -16(%rbp)
mov $1, %rax
mov $1, %rdi
lea -16(%rbp), %rsi
mov $8, %rdx
syscall
leave
ret
в этом тексте есть ошибки.
-
если вы делаете leave, то пишите и enter. это команды, что образуют пару(читайте доки по ним). можно конечно писать аналог enter ручками, как вы тут, но тогда нужно писать правильно.
-
вы вообще не зарезервировали место под локальные переменные данной функции, и стали писать со смещением -16 по отношению к rbp. если вы вызовите еще какую-то функцию из данной на этом стеке(тот же syscall), ваша память по вашему смещение -16(rbp) будет расписана этой функцией. вот либо продвигайте rsp ручками, либо пишите enter <размер фрейма вашей этой функции> посмотрите хоть тут - https://www.osinavi.ru/asm/10.php
-
проверять правильно ли вы загрузили в регистры нечто, и потом сделали syscall не стану, это доки по конкретным системным вызовам надо читать. вот и читайте.
-
вопрос - «помогите прочитать со стека» - некорректен. стек - это область памяти адресуемая регистром - указателем стека. потому надо говорить с какого конкретного смещения на стеке вам надо что-то прочитать.
если я обьясняю студенту как делать домашку, то простите, товарищ студент, читайте доки по асму и как писать на нем функции, а не заставляйте других, писать за вас то, что должны писать вы. чтобы НАУЧИТЬСЯ, надо УЧИТЬСЯ. статей в инете полно. в том числе на русском. ну вот навскидку - https://habr.com/en/post/423077/ там вроде многое разжевано. про enter/leave тоже есть.
Исправление alysnix, :
push %rbp
mov %rsp, %rbp
movq $111, -16(%rbp)
mov $1, %rax
mov $1, %rdi
lea -16(%rbp), %rsi
mov $8, %rdx
syscall
leave
ret
в этом тексте есть ошибки.
-
если вы делаете leave, то пишите и enter. это команды, что образуют пару(читайте доки по ним). можно конечно писать аналог enter ручками, как вы тут, но тогда нужно писать правильно.
-
вы вообще не зарезервировали место под локальные переменные данной функции, и стали писать со смещением -16 по отношению к rbp. если вы вызовите еще какую-то функцию из данной на этом стеке(тот же syscall), ваша память по вашему смещение -16(rbp) будет расписана этой функцией. вот либо продвигайте rsp ручками, либо пишите enter <размер фрейма вашей этой функции> посмотрите хоть тут - https://www.osinavi.ru/asm/10.php
-
проверять правильно ли вы загрузили в регистры нечто, и потом сделали syscall не стану, это доки по конкретным системным вызовам надо читать. вот и читайте.
-
вопрос - «помогите прочитать со стека» - некорректен. стек - это область памяти адресуемая регистром - указателем стека. потому надо говорить с какого конкретного смещения на стеке вам надо что-то прочитать.
если я обьясняю студенту как делать домашку, то простите, товарищ студент, читайте доки по асму и как писать на нем функции, а не заставляйте других, писать за вас то, что должны писать вы. чтобы НАУЧИТЬСЯ, надо УЧИТЬСЯ. статей в инете полно. в том числе на русском.
Исходная версия alysnix, :
push %rbp
mov %rsp, %rbp
movq $111, -16(%rbp)
mov $1, %rax
mov $1, %rdi
lea -16(%rbp), %rsi
mov $8, %rdx
syscall
leave
ret
в этом тексте есть ошибки.
-
если вы делаете leave, то пишите и enter. это команды, что образуют пару(читайте доки по ним). можно конечно писать аналог enter ручками, как вы тут, но тогда нужно писать правильно.
-
вы вообще не зарезервировали место под локальные переменные данной функции, и стали писать со смещением -16 по отношению к rbp. если вы вызовите еще какую-то функцию из данной на этом стеке(тот же syscall), ваша память по вашему смещение -16(rbp) будет расписана этой функцией. вот либо продвигайте rsp ручками, либо пишите enter <размер фрейма вашей этой функции>
-
проверять правильно ли вы загрузили в регистры нечто, и потом сделали syscall не стану, это доки по конкретным системным вызовам надо читать. вот и читайте.
-
вопрос - «помогите прочитать со стека» - некорректен. стек - это область памяти адресуемая регистром - указателем стека. потому надо говорить с какого конкретного смещения на стеке вам надо что-то прочитать.
если я обьясняю студенту как делать домашку, то простите, товарищ студент, читайте доки по асму и как писать на нем функции, а не заставляйте других, писать за вас то, что должны писать вы. чтобы НАУЧИТЬСЯ, надо УЧИТЬСЯ. статей в инете полно. в том числе на русском.