Barrido de TEXTO puro: 1427 líneas de comentario TOML. Cero ArtifactHash movidos, y eso está MEDIDO, no deducido: hasheé las 741 antes y después y los ficheros de hashes son idénticos byte a byte (723 con hash real + 18 que ya no hasheaban de antes). El guardián valió la pena: el primer barrido, filtrando por 'la línea empieza con #', movió el hash de helix, lsof y steam-runtime-sniper. La causa es que una fase se escribe como compile = <triple> ... <triple> y sus comentarios de SHELL también empiezan con #, pero viven dentro del VALOR — y las fases sí entran en hash_inputs. El barrido ahora calcula los rangos de las cadenas multilínea de TOML y no entra ahí. Quedan intactos a propósito: .hammer-zig-cc y .hammer-cargo-vendor (literales dentro de fases), hammerd, hammer-recover y toda ruta que empiece por /
51 lines
2.7 KiB
TOML
51 lines
2.7 KiB
TOML
# Importada de nixpkgs por `takana import-nix` (Etapa G). PUNTO DE PARTIDA, no final:
|
|
# - el build usa el lab de takana (zig-cc / musl estático), NO el stdenv de nix ⇒ revisá
|
|
# compiler/link/phases y adaptá hasta que compile.
|
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
|
name = "naabu"
|
|
version = "2.6.1"
|
|
license = "MIT"
|
|
|
|
[source]
|
|
repo = "https://github.com/projectdiscovery/naabu"
|
|
commit = "5a0ca8bde91b5bb16213e9e8b5c6871eac954bd8"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
# DINÁMICO A PROPÓSITO (no es deuda: es la única opción correcta). Auditado 2026-07-17.
|
|
#
|
|
# naabu depende (vía github.com/Mzack9999/gopacket) de github.com/ebitengine/purego, una FFI
|
|
# SIN cgo que hace `dlopen("libpcap.so.1")` EN RUNTIME. Dos consecuencias encadenadas:
|
|
#
|
|
# 1. `link = "static"` es INALCANZABLE: un binario estático no puede dlopen(). Declararlo
|
|
# static no lo vuelve estático — sólo silencia el escaneo SYN (su feature principal) en
|
|
# runtime. Preferimos la verdad declarada al veredicto cómodo.
|
|
#
|
|
# 2. El NEEDED se ve ANÓMALO (libc.so.6 / libpthread.so.0 / libdl.so.2 = nombres GLIBC en una
|
|
# distro musl) pero NO hay glibc de por medio. La inversión es contraintuitiva: es
|
|
# CGO_ENABLED=0 el que los CAUSA. purego/internal/fakecgo/zsymbols_linux.go está guardado
|
|
# con `//go:build !cgo` y hardcodea los sonames:
|
|
# //go:cgo_import_dynamic purego_malloc malloc "libc.so.6"
|
|
# //go:cgo_import_dynamic purego_pthread_create pthread_create "libpthread.so.0"
|
|
# //go:cgo_import_dynamic purego_dlopen dlopen "libdl.so.2"
|
|
# El linker interno de Go honra esos pragmas ⇒ emite el binario dinámico con esos DT_NEEDED
|
|
# literales. El INTERP sí es musl (/lib/ld-musl-x86_64.so.1): se construyó en el sandbox.
|
|
# En runtime musl los absorbe: su ldso (dynlink.c, "reserved names") bloquea recargar la
|
|
# implementación de libc y resuelve los tres a SÍ MISMO. Verificado en el rootfs Alpine,
|
|
# que no tiene ningún libc.so.6:
|
|
# libdl.so.2 => /lib/ld-musl-x86_64.so.1
|
|
# libc.so.6 => /lib/ld-musl-x86_64.so.1
|
|
# ⇒ son strings vestigiales, no una dependencia glibc real. El binario corre en musl puro.
|
|
#
|
|
# `cgo = true` NO es el arreglo: excluiría los pragmas (files !cgo), pero el lab lo liga con
|
|
# `-extldflags=-static` ⇒ vuelve al problema (1), estático sin dlopen.
|
|
link = "dynamic"
|
|
flags = ["./cmd/naabu"] # varios mains en el repo; fijo el CLI real
|
|
|
|
# buildInputs de nix: go, libpcap. libpcap NO va en deps: no se linkea, se dlopenea en runtime
|
|
# (ver arriba) y no hay receta libpcap en el corpus todavía. El escaneo SYN queda inerte hasta
|
|
# que exista; el escaneo connect (`-s c`, Go puro) funciona sin ella.
|
|
[deps]
|
|
build = ["go"]
|