Claro, no lo había pensado en sub
Muchas gracias.
Lo del ret solo es una duda sobre la posición del stack, pero no importa mucho.
Muchas gracias.
Lo del ret solo es una duda sobre la posición del stack, pero no importa mucho.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú global _start
section .data
section .text
_start:
jmp mess
proc:
xor rax, rax
mov al, 1
xor rdi, rdi
mov dil, 1
pop rsi
xor rdx, rdx
mov dl, 0x12
syscall
;exit
xor rax, rax
mov al, 60
xor rdi, rdi
mov dl, 11
syscall
mess:
call proc
MSG db 'Hola mundo x64',0x0A
/code]
Así call mete en la pila MSG y luego lo retoma RSI con un pop, solo que no recuerdo si lo retoma en esp o en esp+4, lo analice en GDB pero no estoy seguro si es rsp o rsp + 4
(gdb) x/s $rsi
0x4000a8 <MSG>: "Hola mundo x64"
¿Alguien me podría decir cual de las dos formas sería la correcta?
[code]|------------
|rsp ---- MSG
---------------------
|
|rsp + 4 ---- MSG
/code]
Pero también quisiera saber si hay otra forma de lograr eliminar los null sin tener que hacer el call
así lo había dejado pero me encontré con el problema de no saber como eliminar el null de rsi
[code=asm]global _start
section .data
MSG: db 'Hola mundo x64'
length: equ $-MSG
section .text
_start:
xor rax, rax
mov al, 1
xor rdx, rdx
mov bl, 1
xor rsi, rsi
mov rsi, MSG
xor rdx, rdx
mov dl, length
syscall
;exit
xor rax, rax
mov al, 60
xor rdi, rdi
mov dl, 11
syscall
00000000004000b0 <_start>:
4000b0: 48 31 c0 xor rax,rax
4000b3: b0 01 mov al,0x1
4000b5: 48 31 d2 xor rdx,rdx
4000b8: b3 01 mov bl,0x1
4000ba: 48 31 f6 xor rsi,rsi
4000bd: 48 be dc 00 60 00 00 movabs rsi,0x6000dc
4000c4: 00 00 00
4000c7: 48 31 d2 xor rdx,rdx
4000ca: b2 0e mov dl,0xe
4000cc: 0f 05 syscall
4000ce: 48 31 c0 xor rax,rax
4000d1: b0 3c mov al,0x3c
4000d3: 48 31 ff xor rdi,rdi
4000d6: b2 0b mov dl,0xb
4000d8: 0f 05 syscall
|
|rsp + 8
|------------
|rsp + 4
|-----------
|rbp
|------
|ret
|-------
|rbp + 8
--------------
|
|rsp + 8
|------------
|rsp + 4
|-----------
|ret
--------------
ptrw= new PrintWriter(sr.getOutputStream());
ptrw.write(fileList.get(i).getName());
ptrw.flush();
entr = new BufferedReader(new InputStreamReader(sok.getInputStream()));
while((content = entr.readLine()) != null){
System.out.print(content);
System.out.flush();
}
getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
CitarPor el día Otorrinolaringologo por las noches hacker y su misión en la vida es evitar la sordera por volúmenes altos
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class tm{
public static void main(String[] args) {
String pattern = "MM/dd/yyyy";
SimpleDateFormat format = new SimpleDateFormat(pattern);
try {
Date date = format.parse("12/31/2016");
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
// formatting
System.out.println(format.format(new Date()));
}
}
#include <stdio.h>
#include <string.h>
#include <time.h>
int main(){
char buffer[256];
const char *formatoS = "%Y.%m.%d - %H:%M:%S";
struct tm dat;
time_t timp = 1483256049;
localtime_r(&timp, &dat);
strftime(buffer, 256, formatoS, &dat);
printf("%s", buffer);
}
if (!_W.getCookie('506442620979584765_cookie_policy') || (_W.getCookie('506442620979584765_cookie_policy') !== cookie_content)){
if (cookie_location === 'top' || cookie_location === 'bottom'){
.....
<a href = "imagenes/imagen1.jpg" </a>
"imagenes/imagen1.jpg"
"imagenes/imagen2.jpg"
"imagenes/imagen3.jpg"
aviso: el paso del argumento 1 de 'strcmp' crea un puntero desde un entero sin una conversión [-Wint-conversion]
if(strcmp(buff[a], 'c') == 0){
^~~~
In file included from downweb.c:3:0:
/usr/include/string.h:140:12: nota: se esperaba 'const char *' pero el argumento es de tipo 'char'
extern int strcmp (const char *__s1, const char *__s2)
push ebp
mov ebp, esp
push dword [ebp + 0x0C]
push ebx
call comparar
cmp eax, 1
..... etc
mov esp, ebp
pop ebp
comparar:
push ebx
loop:
mov eax, [esp + 0x0C]
mov al, byte [eax]
mov ebx, [esp + 0x08]
cmp al, byte [ebx]
....
pop ebx
y luego de regreso
mov eax, 1 ;--- si no falló nada
ret
push ebp
mov ebp, esp
push dword [ebp + 0x0C]
push ebx
call comparar
mov esp, ebp
pop ebp
push dword[ebp + 0x0C] - esp 0x08
|---------
|
|push ebx - esp 0x04
comparar:
push ebx
|
|push dword[ebp + 0x0C] - esp 0x0C
|---------
|
|push ebx - esp 0x08
|----------
|
|push ebx - esp 0x04
comparar:
push ebx
loop:
mov eax, [esp + 0x0C]
mov al, byte [eax]
mov ebx, [esp + 0x08]
cmp al, byte [ebx]
....
pop ebx
|push dword[ebp + 0x0C] - esp 0x08
|---------
|
|push ebx - esp 0x04