"[contents]" of inp_buf instead of address
mov ecx,[inp_buf]
mostly...
You could give some thought to what's in edx. When you read the input, edx has msg_size in it from the first write, so that's all the user can input, even though you've got a buffer of 800 bytes (100 qwords). If you let 'em put in up to 800 bytes, the amount that they actually input will be in eax. You want that value in edx when you write it back... but you write msg2 first, so you'll need to save that value... the stack might be a handy place...
...
mov eax,3
mov ebx,1 ; reading from stdout? will work(!). zero (stdin) better
; xor ecx,ecx ; not useful
mov ecx,inp_buf
mov edx, 800
int 80h
push eax ; save input count
mov eax,4
mov ebx,1
mov ecx,msg2
mov edx,msg2_size
int 80h
mov eax,4
mov ebx,1
mov ecx, inp_buf
pop edx ; get input count back
int 80h
...
That's untested, but I think it'll work. The "count" from the read will include the linefeed (0x0A). If you don't want to print that (you probably do, in this case), subtract 1. By rights, you might want to read only 799 bytes - make sure there's room for it in the buffer...
Best,
Frank