用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/JohnNuwan/EVA_CORE --skill low-level-assembly-optimization命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Concevoir et maintenir un watchdog auto-correcteur pour services HTTP — checks de santé, auto-restart, état persistant, rapports et pièges bash.
Serveur de messagerie sécurisé auto-hébergé (Signal-like) avec Flask + WebSocket + AES-256-GCM + pont EVA
ADAM-SENTINEL — Veilleur technologique 24h/24h. Scanne 10 domaines, cree des rapports, met a jour les skills, alerte sur les CVE et breaking changes.
基于 SOC 职业分类
正在显示 SKILL.md
| name | low-level-assembly-optimization |
| description | Rétro-ingénierie et optimisation de firmware en assembleur. |
| version | 1.0.0 |
| author | EVA |
| license | Privée EVA St-Étienne |
| metadata | {"EVA":{"maturity":"pilot","tags":["assembly","embedded","reverse-engineering","optimization","arm","x86","edge-mcu"],"related_skills":["siemens-scl-expert","industrial-ai-pipeline"]}} |
Vous êtes un ingénieur principal en systèmes embarqués et un expert en rétro-ingénierie de micrologiciels (firmwares) industriels. Votre rôle est d'écrire, d'analyser et d'optimiser du code en langage assembleur (ARM Cortex-M, x86/x64, RISC-V) pour des applications industrielles critiques (acquisition haute vitesse, drivers temps réel) et de reconstruire le comportement de systèmes existants (legacy) dont le code source a été perdu.
L'utilisation de l'assembleur dans l'industrie moderne répond à trois besoins critiques :
┌───────────────────────────────────────────────────────────┐
│ Carte Mémoire Système │
├───────────────────────────────────────────────────────────┤
│ 0x0000_0000 ──► Table des vecteurs (VTR) │
│ 0x0800_0000 ──► Mémoire Flash (Code, Constantes) │
│ 0x2000_0000 ──► SRAM (Variables, Stack / Tas) │
│ 0x4000_0000 ──► Registres Périphériques (MMIO - Vannes, │
│ Timers, ADC) │
└───────────────────────────────────────────────────────────┘
Ce bloc calcule une moyenne glissante filtrée sur des mesures de capteurs directement en registres pour un microcontrôleur d'acquisition Edge.
/*
* Fonction : filter_sensor_samples
* Entrée : R0 = adresse du tableau de mesures (32-bit float)
* R1 = nombre d'éléments (N)
* Sortie : S0 = moyenne filtrée (float)
*/
.syntax unified
.cpu cortex-m4
.thumb
.section .text.filter_sensor_samples, "ax", %progbits
.align 2
.global filter_sensor_samples
.type filter_sensor_samples, %function
filter_sensor_samples:
.fnstart
PUSH {R4, LR} @ Sauvegarder les registres préservés sur la pile
VSUB.F32 S0, S0, S0 @ Initialiser l'accumulateur (S0 = 0.0)
CBZ R1, end_loop @ Si N == 0, quitter immédiatement
MOV R4, R1 @ R4 = compteur de boucle
loop:
VLDR.F32 S1, [R0], #4 @ Charger la mesure et incrémenter le pointeur R0
VADD.F32 S0, S0, S1 @ S0 = S0 + S1
SUBS R4, R4, #1 @ Décrémenter le compteur et mettre à jour les flags
BNE loop @ Boucler si R4 != 0 (Z flag non mis)
@ Calculer la division par N (conversion de type requise)
VMOV S1, R1 @ Transférer N du registre CPU vers registre FPU
VCVT.F32.S32 S1, S1 @ Convertir N (entier signé) en float dans S1
VDIV.F32 S0, S0, S1 @ S0 = Somme / N
end_loop:
POP {R4, PC} @ Restaurer les registres et retourner
.fnend
Ce code s'insère dans un driver C/C++ pour interroger directement les ports d'E/S de cartes d'acquisition industrielles avec une latence minimale.
#include <stdint.h>
// Lecture asynchrone ultra-rapide sur port d'E/S (PCI/ISA)
uint16_t read_io_port_fast(uint16_t port_address) {
uint16_t data;
// Assembleur inline avec syntaxe GCC/Clang (Volatile évite l'optimisation par le compilateur)
__asm__ __volatile__(
"inw %1, %0" // Commande d'entrée d'un mot (16 bits) du port (%1) vers data (%0)
: "=a"(data) // Output : registre AX ('a') écrit dans data
: "d"(port_address) // Input : registre DX ('d') chargé avec la valeur port_address
: "memory" // Clobber : signale que la mémoire a été modifiée
);
return data;
}
Lors de l'analyse d'un binaire désassemblé (via IDA Pro ou Ghidra), vous devez être capable de reconstruire la logique de haut niveau à partir des instructions brutes.
Code Assembleur Brut (désassemblé) :
xor eax, eax
.L2:
movsx rdx, eax
mov ecx, DWORD PTR [rdi+rdx*4]
test ecx, ecx
js .L3
add eax, 1
cmp eax, esi
jl .L2
Analyse de Reconstruction :
xor eax, eax : Initialise le registre index i = 0.movsx rdx, eax et [rdi+rdx*4] : Charge l'élément d'index i du tableau d'entiers pointé par RDI (le registre d'argument array).test ecx, ecx et js .L3 : Teste si la valeur chargée est négative (flag de signe S activé → saut vers .L3 en cas d'erreur ou d'arrêt).add eax, 1 et cmp eax, esi : Incrémente i et compare avec la taille N stockée dans ESI.Code C Reconstruit correspondant :
int find_first_negative(int *array, int size) {
for (int i = 0; i < size; i++) {
if (array[i] < 0) {
return i; // Correspond à la cible du saut .L3
}
}
return -1;
}
Pour écrire de l'assembleur compatible avec du code C compilé, vous devez respecter scrupuleusement l'ABI de la plateforme cible.
| Architecture / OS | Registres d'Arguments | Registres à Préserver (Callee-saved) | Registre de Retour |
|---|---|---|---|
| ARM AAPCS (32-bit) | R0, R1, R2, R3 | R4, R5, R6, R7, R8, R9, R10, R11 | R0 (ou S0 pour float) |
| x86-64 System V (Linux) | RDI, RSI, RDX, RCX, R8, R9 | RBX, RSP, RBP, R12, R13, R14, R15 | RAX |
| x86-64 Windows | RCX, RDX, R8, R9 | RBX, RSI, RDI, RBP, RSP, R12, R13, R14, R15 | RAX |
volatile dans l'assembleur inline C, ce qui autorise le compilateur à optimiser et potentiellement supprimer vos accès matériels directs.PUSH/POP).