
Execute código ARM64 preservado no Node ou em um navegador; inspecione pixels de imagens decodificadas e memória inicializada.
Execute código nativo preservado. Reabra seu estado inicializado. O Capsulith empacota funções ARM64 selecionadas, seus contratos de chamada e memória própria para Node ou para o navegador. Mantenha as instruções originais e retome um objeto inicializado em um novo worker, sem a aplicação original.
Um decodificador legado, checksum ou rotina binária isolada pode se tornar uma pequena API reutilizável. O Capsulith mostra quais bytes e dependências viajam com ele, onde a execução lê e escreve, e por que um recurso não pode ser extraído quando exige estado não suportado.
Abra o workbench de imagens nativas. Escolha Load & run example para a arte QOI preparada, ou traga uma pequena imagem PNG ou QOI. O codificador QOI original extraído grava um arquivo, um decodificador nativo separado retorna seus pixels, e você pode inspecionar bytes RGBA individuais. Preserve essa alocação de pixels inicializada, feche o worker, depois restaure e libere-a em um novo. Nenhuma conta, servidor de upload, binário original ou compilador é necessário para executar o workbench público.
PNG usa RGBA decodificado pelo navegador como linha de base explícita de comparação; entrada apenas QOI não tem comparação independente de pixels de origem. As imagens são limitadas a 256 pixels por dimensão e 1 MiB. Esta é uma demonstração de componente nativo preparado com fonte conhecida, não um novo codec ou recuperação universal de formato. Código-fonte original do QOI, contratos, controles nativos/FFmpeg independentes e comandos Node autônomos.

Experimente a demonstração de objeto no navegador sem chave e pressione Run lifecycle. Ela executa as instruções extraídas reais localmente; não chama um servidor para gerar resultados.
Baixe o wheel Python na release, depois:
python3 -m pip install capsulith-0.3.0-py3-none-any.whl
capsulith studio
Abra http://127.0.0.1:6359. A função Studio retém o decodificador LZ4 e os espécimes xxHash. Abra Object studio, escolha Open original LZ4 example e depois Run lifecycle para criar, comprimir, salvar um dicionário, criar checkpoint, restaurar, continuar e liberar um stream compilado real. Nenhuma chave de API ou serviço pago é necessário. Python 3.10+ e Capstone são necessários para extração; o navegador executa através do emulador WebAssembly incluído. Node 20+ é necessário apenas para CLI ou chamadas Node exportadas.
O Studio aceita uma dylib Mach-O ARM64, inventaria as suas funções, extrai uma raiz selecionada e permite editar buffers, argumentos de registo, entradas escalares e tipo de retorno. A vista de dependências liga helpers/imports a locais de chamada reais e instruções originais. Os eventos de execução ligam à região de memória nomeada e ao código original. Execuções paradas mostram evidência parcial sem uma alegação de resultado bem-sucedido.
Export portable capsule descarrega os bytes atuais, o contrato e as entradas, os runners Node/browser, o backend fixado, o código-fonte/scripts de build completos do backend e as licenças. Descomprima e execute node run.cjs, ou sirva essa pasta por HTTP e abra o seu runner de navegador independente. Python, Capstone e o binário original são desnecessários para essas chamadas. A API exportada aceita entradas diferentes, suporta cancelamento e impõe os limites declarados.
Original LZ4 methods, restored dictionary access and exact native comparison in the object Studio
O object Studio importa JSON de módulo extraído ou lê o seu artefacto ARM64 Mach-O próprio com métodos nomeados explicitamente declarados. Inspecione as raízes, chunks e dependências reais; aloque buffers de chamador nomeados a partir de hex ou de um ficheiro local; escolha um método e forneça referências de região tipadas ou inteiros. O mapa de memória mostra regiões reais próprias e inicialização, com bytes brutos opacos em vez de campos adivinhados. Retornos, intervalos de acesso, contadores e eventos limitados vêm de instruções originais.
Guarde um checkpoint antes de uma operação que possa precisar de desfazer. Restaurar um módulo correspondente preserva os endereços de guest e os IDs de região mas cria uma nova identidade de instância; re-vincule referências por ID de região. Editar entradas revoga evidência obsoleta, e uma falha ou cancelamento requer um checkpoint prévio ou uma nova instância. A libertação nativa e a libertação do buffer do chamador são operações de ciclo de vida explícitas e separadas. O runtime nunca adivinha se os ponteiros nativos ainda se referem a um buffer.
capsulith module examples/lz4/liblz4.dylib \
--methods examples/native-objects/methods.json --out stream.module.json
node runtime/object-cli.cjs examples/native-objects/start.json \
--module stream.module.json --checkpoint-out first.checkpoint.json
# The first Node process has ended. This command opens a fresh worker.
node runtime/object-cli.cjs examples/native-objects/continue.json \
--module stream.module.json --checkpoint first.checkpoint.json
capsulith export-module stream.module.json \
--checkpoint first.checkpoint.json --out stream-object.zip
Escolha novos nomes de saída; os comandos de exportação de módulo, checkpoint e objeto recusam-se a sobrescrever ficheiros existentes. Os programas de operação fornecidos são específicos do ciclo de vida LZ4 documentado. Os módulos genéricos necessitam dos seus próprios métodos declarados pelo chamador e programas de operação.
Uma exportação de objeto contém o módulo de instruções original, bytes de checkpoint retidos opcionais, runners independentes para Node/browser, o Studio do objeto, o runtime e os scripts de compilação/fonte do backend correspondente, licenças e um manifesto de ficheiros com bytes, SHA256 e permissões. Sirva a pasta e abra index.html para restaurar o checkpoint incluído sem endpoints de API, ou execute node run.cjs your-operations.json --checkpoint checkpoint.json. Binários originais, pacotes Python e compiladores são desnecessários para a execução. Um checkpoint inclui bytes do chamador retidos; inspecione-os antes de partilhar. Consulte a API de objetos e o formato de operação e o exemplo nativo.
capsulith inspect legacy.dylib
capsulith extract legacy.dylib --root _decode \
--contract decode-contract.json --out decode.capsule.json
capsulith run decode.capsule.json --inputs input.json
capsulith export decode.capsule.json --inputs input.json --out decoder.zip
A seleção de root também aceita um endereço de início de função verificado, como --root 0x440. Um símbolo exportado não é um protótipo. Você fornece o contrato de chamada real; o Capsulith não infere uma ABI (as regras que colocam argumentos e valores de retorno em registradores). O guia de runtime define buffers, inteiros de 32/64 bits, importações de memória e limites. examples/xxhash/contract.json é um exemplo completo de três argumentos.