소스 정보
- 저장소
- JohnNuwan/EVA_CORE
- 최근 소스 활동
- 2026년 7월 18일 08:30
- 감지된 SKILL.md 언어
- 프랑스어
- 스타
- 0
- 포크
- 0
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
SOC 직업 분류 기준
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/JohnNuwan/EVA_CORE --skill low-level-assembly-optimization명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
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.
| 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).