LINUX.ORG.RU

История изменений

Исправление 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

в этом тексте есть ошибки.

  1. если вы делаете leave, то пишите и enter. это команды, что образуют пару(читайте доки по ним). можно конечно писать аналог enter ручками, как вы тут, но тогда нужно писать правильно.

  2. вы вообще не зарезервировали место под локальные переменные данной функции, и стали писать со смещением -16 по отношению к rbp. если вы вызовите еще какую-то функцию из данной на этом стеке(тот же syscall), ваша память по вашему смещение -16(rbp) будет расписана этой функцией. вот либо продвигайте rsp ручками, либо пишите enter <размер фрейма вашей этой функции> посмотрите хоть тут - https://www.osinavi.ru/asm/10.php

  3. проверять правильно ли вы загрузили в регистры нечто, и потом сделали syscall не стану, это доки по конкретным системным вызовам надо читать. вот и читайте.

  4. вопрос - «помогите прочитать со стека» - некорректен. стек - это область памяти адресуемая регистром - указателем стека. потому надо говорить с какого конкретного смещения на стеке вам надо что-то прочитать.

если я обьясняю студенту как делать домашку, то простите, товарищ студент, читайте доки по асму и как писать на нем функции, а не заставляйте других, писать за вас то, что должны писать вы. чтобы НАУЧИТЬСЯ, надо УЧИТЬСЯ. статей в инете полно. в том числе на русском. ну вот навскидку - 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

в этом тексте есть ошибки.

  1. если вы делаете leave, то пишите и enter. это команды, что образуют пару(читайте доки по ним). можно конечно писать аналог enter ручками, как вы тут, но тогда нужно писать правильно.

  2. вы вообще не зарезервировали место под локальные переменные данной функции, и стали писать со смещением -16 по отношению к rbp. если вы вызовите еще какую-то функцию из данной на этом стеке(тот же syscall), ваша память по вашему смещение -16(rbp) будет расписана этой функцией. вот либо продвигайте rsp ручками, либо пишите enter <размер фрейма вашей этой функции> посмотрите хоть тут - https://www.osinavi.ru/asm/10.php

  3. проверять правильно ли вы загрузили в регистры нечто, и потом сделали syscall не стану, это доки по конкретным системным вызовам надо читать. вот и читайте.

  4. вопрос - «помогите прочитать со стека» - некорректен. стек - это область памяти адресуемая регистром - указателем стека. потому надо говорить с какого конкретного смещения на стеке вам надо что-то прочитать.

если я обьясняю студенту как делать домашку, то простите, товарищ студент, читайте доки по асму и как писать на нем функции, а не заставляйте других, писать за вас то, что должны писать вы. чтобы НАУЧИТЬСЯ, надо УЧИТЬСЯ. статей в инете полно. в том числе на русском.

Исходная версия 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

в этом тексте есть ошибки.

  1. если вы делаете leave, то пишите и enter. это команды, что образуют пару(читайте доки по ним). можно конечно писать аналог enter ручками, как вы тут, но тогда нужно писать правильно.

  2. вы вообще не зарезервировали место под локальные переменные данной функции, и стали писать со смещением -16 по отношению к rbp. если вы вызовите еще какую-то функцию из данной на этом стеке(тот же syscall), ваша память по вашему смещение -16(rbp) будет расписана этой функцией. вот либо продвигайте rsp ручками, либо пишите enter <размер фрейма вашей этой функции>

  3. проверять правильно ли вы загрузили в регистры нечто, и потом сделали syscall не стану, это доки по конкретным системным вызовам надо читать. вот и читайте.

  4. вопрос - «помогите прочитать со стека» - некорректен. стек - это область памяти адресуемая регистром - указателем стека. потому надо говорить с какого конкретного смещения на стеке вам надо что-то прочитать.

если я обьясняю студенту как делать домашку, то простите, товарищ студент, читайте доки по асму и как писать на нем функции, а не заставляйте других, писать за вас то, что должны писать вы. чтобы НАУЧИТЬСЯ, надо УЧИТЬСЯ. статей в инете полно. в том числе на русском.