assembly 에서 lea 명령어가 뭔가요..?

blksaint의 이미지

0x804854d <main+77> mov 0x804971c,%eax
0x8048552 <main+82> push %eax
0x8048553 <main+83> push $0x3ff
0x8048558 <main+88> lea 0xfffffbf4(%ebp),%eax
0x804855e <main+94> push %eax
0x804855f <main+95> call 0x80483e4 <fgets>
0x8048564 <main+100> add $0xc,%esp

<main+88> 부분의 lea 명령이 도대체 뭘 하는 거죠..?

어셈 명령어가 잘 나와 있는 사이트 혹시 없을까요..?

오늘 하루도 행복하세요..^^

redcloak의 이미지

Load Effective Address란 의미로 다음의 인자를 주소값으로 인식합니다.
ebp가 가리키고 있는 주소값에 앞의 0xfffffbf4 값을 더하여 eax로 넣기..

번역한 부분이 별로 없지만, 상당한 양의 명령어가 있으므로 그런대로 유용할 거라 생각됩니다. 페이지 불러오는데 시간이 좀 걸리니, 좀 기다려보세요.. 8)

http://khdp.org/asm/asm_inst.php

* Art is long, life is short *

익명 사용자의 이미지

blksaint wrote:
0x804854d <main+77>: mov 0x804971c,%eax
0x8048552 <main+82>: push %eax
0x8048553 <main+83>: push $0x3ff
0x8048558 <main+88>: lea 0xfffffbf4(%ebp),%eax
0x804855e <main+94>: push %eax
0x804855f <main+95>: call 0x80483e4 <fgets>
0x8048564 <main+100>: add $0xc,%esp

<main+88> 부분의 lea 명령이 도대체 뭘 하는 거죠..?

어셈 명령어가 잘 나와 있는 사이트 혹시 없을까요..?

오늘 하루도 행복하세요..^^


lea 명령은 덧뺄셈 명령이라 생각하시면 됩니다. 즉, 소스 레지스터의 값에 인덱스만큼 더해서 데스티네이션 레지스터에 넣으라는 뜻이죠. 따라서 식으로 표현하면
%eax = %ebp + 0xfffffbf4또는
%eax = %ebp - 0x40c (2의 보수 취한 표현)
정도 되겠습니다. lea는 크게 2가지 용도, 즉 지역 변수의 포인터를 취할 때, 또는 간단한 사칙연산 최적화 코드의 일부로 사용됩니다. 위의 경우는 프레임 포인터 %ebp 레지스터에서 0x40c만큼 떨어진 위치에 있는 지역 변수의 포인터(&)를 취해서 fgets 함수에 넘겨주라는 뜻입니다.

혼동하면 안되는 것은 lea는 소스 레지스터가 가리키고 있는 곳의 값에 더하거나 빼는 것이 아니라 그 레지스터 값 자체에다 더하거나 뺀다는 점입니다.

urmajest의 이미지

앞쪽이 destination 아닌가요?

어셈블리어는 명령어불문하고 앞쪽이 destination인데 -_-

제가 틀렸나요?

zihado의 이미지

AT&T assembly 에서는 [source] [destination] 이고
Intel assembly 는 그 반대입니다.

urmajest의 이미지

감사합니다

pynoos의 이미지

두개의 operand를 갖는 assembly code 가 CPU architecture 별로 다른 것이 아닙니다.

같은 CPU라도 어떤 assembler, disassembler 를 사용하느냐에 따라 다릅니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.