어셈블리 프로그램에 대해^^

익명 사용자의 이미지

filename 이라는 변수에 파일 이름을 할당 받았는데
파일이름 뒤에 개행문자 까지 입력되서
그걸 0 으로 바꿀려구 하는데 어떻게 해야 할지...

;; nread = read(0, filename, sizeof(filename));

mov eax, 3
mov ebx, 0
mov ecx, filename
mov edx, filename_len
int 0x80
mov [nread], eax

;; filename[nread-1] = '\0'
이 부분좀 가르쳐 주세여^^*

익명 사용자의 이미지

mov eax, nread
dec eax
mov [filename+eax], 0

익명 사용자의 이미지

컴파일 하니까 이런 글만 뜨네여 ^^;;
operation size not specified

=========================================================================
BITS 32

segment .text
global _start

_start

;; write(1, prompt, sizeof(prompt));

mov eax, 4 ; 4 == write system call
number
mov ebx, 1 ; 1 == stdout
mov ecx, prompt ; "What is your name? "
mov edx, prompt_len ; length("What is your
name? ");
int 0x80 ; linux system call
interrupt

;; nread = read(0, filename, sizeof(filename));

mov eax, 3 ; 3 == read
mov ebx, 0 ; 0 == stdin
mov ecx, filename
mov edx, filename_len ; buffer size
int 0x80
mov [nread], eax ; eax == the number of bytes
read

;; filename[nread-1] = '\0' <- 이부분
mov eax, nread
dec eax
mov [filename+eax],0

;; fd = open(finename, O_RDONLY);
mov eax, 5
mov ebx, filename
mov ecx, 0q
int 0x80
mov [fd], eax

;; if (fd == -1 ) {
;; write(2, open_error, sizeof(open_error));
;; exit(-1);
;; }
mov eax, [fd]
cmp eax, -1
jne if_end
mov eax, 4
mov ebx, 2
mov ecx, open_error
mov edx, open_error_len
int 0x80
if_end

;; nread = read(fd, buffer, sizeof(buffer));
mov eax, 3
mov ebx, [fd]
mov ecx, buffer
mov edx, buffer_len
int 0x80
mov [nread], eax

;; while (nread > 0) {
;; write(1, buffer, nread);
;; nread = read(fd, buffer, sizeof(buffer));
;; }

while_block
mov eax, [nread]
cmp eax, 0
jng while_end

mov eax, 4
mov ebx, 1
mov ecx, buffer
mov edx, [nread]
int 0x80

mov eax, 3
mov ebx, [fd]
mov ecx, buffer
mov edx, buffer_len
int 0x80
mov [nread], eax
jmp while_block
while_end

;; close(fd);
mov eax, 6
mov ebx, [fd]
int 0x80

;; exit(0);
mov eax, 1 ; 1 == exit system call
number
mov ebx, 0 ; return value
int 0x80

segment .data
prompt db 'filename = '
prompt_len equ $ - prompt
open_error db 'cannot open file!'
open_error_len equ $ - open_error

segment .bss
filename resb 1024
filename_len equ $ - filename
buffer resb 1024
buffer_len equ $ - buffer
fd resb 1
nread resb 1
=========================================================================

익명 사용자의 이미지

프로그램이 표준 입력에서 파일이름을 입력 받아
파일의 내용을 표준 출력으로 출력하는 거거든여...
스트링 처리 때문에 마무리 못하고 있는데 ㅠㅠ
아참 주석 부분은 이 프로그램 하고 상관 없거든여...^^;;
제발 아시면 가르쳐 주세여...

익명 사용자의 이미지

죄송합니다. 제가 인라인 어셈블러로 테스트 해보는 바람에...
mov eax, nread
dec eax
mov byte ptr filename[eax], 0

mov 에서 operation size 가 어셈블러 입장에서는 명확하지 않아서
발생한 오류 같습니다.
그래도 안되면 잘 모르겠습니다... ㅡㅡ;
GNU 어셈블러라면 movb 인스트럭션을 쓰면 되고요...

익명 사용자의 이미지

제가 말씀드린대로 하면 되나요, 안되나요?
저도 그것이 알고 싶군요...
제가 지금 NT 상태라 리눅스에서 테스트를 해볼 수가 없군요...
ㅡㅡ;

익명 사용자의 이미지

지금 사용하고 있는 어셈블러가 nasm 이거든여....
있는 책는 원서라 공부 하기 정말 힘드내여 ^^;;;

익명 사용자의 이미지

한번만 더 해 보실래요? 밑지는 셈 치고... ㅡㅡ;
저도 집에 가서 한 번 해볼께요...

일단 ptr 만 빼보고...
mov byte filename[eax], 0

아니면, 처음 했던거에 byte 만 추가해서...
mov byte [filename+eax], 0

실제로 리눅스 켜놓고 해보면 답을 찾을 수 있을 것 같습니다.
혹시 위에서 말씀드린 걸로 되면 좀 알려 주세요... ^^

익명 사용자의 이미지

테스트 해봤습니다.
mov byte [filename+eax], 0
안되면, 이젠 진짜로 모릅니다. ㅠㅠ

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.