@sylix/coworker 2.0.11 → 2.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/dist/commands/slash/config.d.ts.map +1 -1
  2. package/dist/commands/slash/config.js +22 -4
  3. package/dist/commands/slash/config.js.map +1 -1
  4. package/dist/core/CoWorkerAgent.d.ts.map +1 -1
  5. package/dist/core/CoWorkerAgent.js +6 -3
  6. package/dist/core/CoWorkerAgent.js.map +1 -1
  7. package/dist/skills/defaults/accessibility/screen-reader-testing.md +545 -0
  8. package/dist/skills/defaults/accessibility/wcag-audit-patterns.md +555 -0
  9. package/dist/skills/defaults/ai-ml/rag.md +276 -0
  10. package/dist/skills/defaults/backend-development/api-design-principles.md +528 -0
  11. package/dist/skills/defaults/backend-development/api-design.md +285 -0
  12. package/dist/skills/defaults/backend-development/architecture-patterns.md +494 -0
  13. package/dist/skills/defaults/backend-development/async-python.md +237 -0
  14. package/dist/skills/defaults/backend-development/auth-implementation-patterns.md +638 -0
  15. package/dist/skills/defaults/backend-development/bazel-build-optimization.md +387 -0
  16. package/dist/skills/defaults/backend-development/billing-automation/SKILL.md +566 -0
  17. package/dist/skills/defaults/backend-development/code-review-excellence.md +538 -0
  18. package/dist/skills/defaults/backend-development/cqrs-implementation.md +554 -0
  19. package/dist/skills/defaults/backend-development/database-design.md +305 -0
  20. package/dist/skills/defaults/backend-development/debugging-strategies.md +536 -0
  21. package/dist/skills/defaults/backend-development/e2e-testing-patterns.md +544 -0
  22. package/dist/skills/defaults/backend-development/error-handling-patterns.md +641 -0
  23. package/dist/skills/defaults/backend-development/fastapi-templates.md +559 -0
  24. package/dist/skills/defaults/backend-development/fastapi.md +309 -0
  25. package/dist/skills/defaults/backend-development/git-advanced-workflows.md +405 -0
  26. package/dist/skills/defaults/backend-development/microservices-patterns.md +595 -0
  27. package/dist/skills/defaults/backend-development/microservices.md +284 -0
  28. package/dist/skills/defaults/backend-development/monorepo-management.md +623 -0
  29. package/dist/skills/defaults/backend-development/nodejs-backend-patterns.md +1048 -0
  30. package/dist/skills/defaults/backend-development/nx-workspace-patterns.md +457 -0
  31. package/dist/skills/defaults/backend-development/paypal-integration/SKILL.md +478 -0
  32. package/dist/skills/defaults/backend-development/pci-compliance/SKILL.md +480 -0
  33. package/dist/skills/defaults/backend-development/python-anti-patterns.md +349 -0
  34. package/dist/skills/defaults/backend-development/python-background-jobs.md +364 -0
  35. package/dist/skills/defaults/backend-development/python-code-style.md +360 -0
  36. package/dist/skills/defaults/backend-development/python-configuration.md +368 -0
  37. package/dist/skills/defaults/backend-development/python-design-patterns.md +296 -0
  38. package/dist/skills/defaults/backend-development/python-error-handling.md +323 -0
  39. package/dist/skills/defaults/backend-development/python-packaging.md +887 -0
  40. package/dist/skills/defaults/backend-development/python-performance-optimization.md +874 -0
  41. package/dist/skills/defaults/backend-development/python-project-structure.md +252 -0
  42. package/dist/skills/defaults/backend-development/python-resilience.md +376 -0
  43. package/dist/skills/defaults/backend-development/python-resource-management.md +421 -0
  44. package/dist/skills/defaults/backend-development/python-type-safety.md +428 -0
  45. package/dist/skills/defaults/backend-development/sql-optimization-patterns.md +509 -0
  46. package/dist/skills/defaults/backend-development/stripe-integration/SKILL.md +522 -0
  47. package/dist/skills/defaults/backend-development/turborepo-caching.md +376 -0
  48. package/dist/skills/defaults/blockchain/defi-protocol-templates.md +430 -0
  49. package/dist/skills/defaults/blockchain/nft-standards.md +364 -0
  50. package/dist/skills/defaults/blockchain/solidity-security.md +514 -0
  51. package/dist/skills/defaults/blockchain/web3-testing.md +360 -0
  52. package/dist/skills/defaults/business/competitive-landscape/SKILL.md +527 -0
  53. package/dist/skills/defaults/business/market-sizing-analysis/SKILL.md +451 -0
  54. package/dist/skills/defaults/business/startup-financial-modeling/SKILL.md +494 -0
  55. package/dist/skills/defaults/business/startup-metrics-framework/SKILL.md +564 -0
  56. package/dist/skills/defaults/business/team-composition-analysis.md +437 -0
  57. package/dist/skills/defaults/compliance/employment-contract-templates/SKILL.md +527 -0
  58. package/dist/skills/defaults/compliance/gdpr-data-handling/SKILL.md +630 -0
  59. package/dist/skills/defaults/data-engineering/airflow-dag-patterns.md +436 -0
  60. package/dist/skills/defaults/data-engineering/airflow.md +519 -0
  61. package/dist/skills/defaults/data-engineering/data-quality.md +583 -0
  62. package/dist/skills/defaults/data-engineering/dbt-transformation-patterns.md +482 -0
  63. package/dist/skills/defaults/data-engineering/dbt.md +556 -0
  64. package/dist/skills/defaults/data-engineering/ml-pipeline-workflow/SKILL.md +247 -0
  65. package/dist/skills/defaults/data-engineering/spark-optimization.md +348 -0
  66. package/dist/skills/defaults/data-engineering/spark.md +411 -0
  67. package/dist/skills/defaults/database/postgresql.md +202 -0
  68. package/dist/skills/defaults/debugging/systematic-debugging.md +249 -0
  69. package/dist/skills/defaults/devops/architecture-decision-records.md +448 -0
  70. package/dist/skills/defaults/devops/changelog-automation.md +580 -0
  71. package/dist/skills/defaults/devops/cicd.md +314 -0
  72. package/dist/skills/defaults/devops/cloud.md +263 -0
  73. package/dist/skills/defaults/devops/code-review-excellence.md +299 -0
  74. package/dist/skills/defaults/devops/cost-optimization.md +295 -0
  75. package/dist/skills/defaults/devops/deployment-pipeline-design.md +356 -0
  76. package/dist/skills/defaults/devops/docker.md +281 -0
  77. package/dist/skills/defaults/devops/git-workflows.md +205 -0
  78. package/dist/skills/defaults/devops/github-actions.md +311 -0
  79. package/dist/skills/defaults/devops/gitlab-ci-patterns.md +266 -0
  80. package/dist/skills/defaults/devops/hybrid-cloud-networking.md +241 -0
  81. package/dist/skills/defaults/devops/istio-traffic-management.md +327 -0
  82. package/dist/skills/defaults/devops/kubernetes.md +339 -0
  83. package/dist/skills/defaults/devops/linkerd-patterns.md +311 -0
  84. package/dist/skills/defaults/devops/multi-cloud-architecture.md +181 -0
  85. package/dist/skills/defaults/devops/observability.md +243 -0
  86. package/dist/skills/defaults/devops/openapi-spec-generation.md +1024 -0
  87. package/dist/skills/defaults/devops/postmortem-writing.md +396 -0
  88. package/dist/skills/defaults/devops/prometheus-configuration.md +265 -0
  89. package/dist/skills/defaults/devops/secrets-management.md +341 -0
  90. package/dist/skills/defaults/devops/service-mesh-observability.md +385 -0
  91. package/dist/skills/defaults/devops/terraform-module-library.md +244 -0
  92. package/dist/skills/defaults/finance/backtesting-frameworks/SKILL.md +663 -0
  93. package/dist/skills/defaults/finance/risk-metrics-calculation/SKILL.md +557 -0
  94. package/dist/skills/defaults/frontend/accessibility-compliance.md +420 -0
  95. package/dist/skills/defaults/frontend/design-system-patterns.md +337 -0
  96. package/dist/skills/defaults/frontend/interaction-design.md +327 -0
  97. package/dist/skills/defaults/frontend/javascript.md +311 -0
  98. package/dist/skills/defaults/frontend/modern-javascript-patterns.md +927 -0
  99. package/dist/skills/defaults/frontend/react-native-design.md +440 -0
  100. package/dist/skills/defaults/frontend/react.md +345 -0
  101. package/dist/skills/defaults/frontend/responsive-design.md +472 -0
  102. package/dist/skills/defaults/frontend/tailwind-design-system.md +337 -0
  103. package/dist/skills/defaults/frontend/typescript-advanced-types.md +724 -0
  104. package/dist/skills/defaults/frontend/typescript.md +334 -0
  105. package/dist/skills/defaults/frontend/visual-design-foundations.md +326 -0
  106. package/dist/skills/defaults/frontend/web-component-design.md +279 -0
  107. package/dist/skills/defaults/game-development/godot-gdscript-patterns.md +188 -0
  108. package/dist/skills/defaults/game-development/unity-ecs-patterns.md +594 -0
  109. package/dist/skills/defaults/kubernetes/gitops-workflow.md +285 -0
  110. package/dist/skills/defaults/kubernetes/gitops.md +280 -0
  111. package/dist/skills/defaults/kubernetes/helm-chart-scaffolding.md +553 -0
  112. package/dist/skills/defaults/kubernetes/helm.md +343 -0
  113. package/dist/skills/defaults/kubernetes/k8s-manifest-generator.md +501 -0
  114. package/dist/skills/defaults/kubernetes/k8s-security-policies.md +342 -0
  115. package/dist/skills/defaults/kubernetes/manifests.md +330 -0
  116. package/dist/skills/defaults/kubernetes/security.md +337 -0
  117. package/dist/skills/defaults/llm-application/embedding-strategies.md +608 -0
  118. package/dist/skills/defaults/llm-application/hybrid-search-implementation.md +570 -0
  119. package/dist/skills/defaults/llm-application/hybrid-search.md +570 -0
  120. package/dist/skills/defaults/llm-application/langchain-architecture.md +666 -0
  121. package/dist/skills/defaults/llm-application/langchain.md +259 -0
  122. package/dist/skills/defaults/llm-application/llm-evaluation.md +695 -0
  123. package/dist/skills/defaults/llm-application/prompt-engineering-patterns.md +449 -0
  124. package/dist/skills/defaults/llm-application/prompt-engineering.md +219 -0
  125. package/dist/skills/defaults/llm-application/rag-implementation.md +434 -0
  126. package/dist/skills/defaults/llm-application/similarity-search-patterns.md +560 -0
  127. package/dist/skills/defaults/llm-application/similarity-search.md +560 -0
  128. package/dist/skills/defaults/llm-application/vector-index-tuning.md +523 -0
  129. package/dist/skills/defaults/mobile/mobile-android-design.md +440 -0
  130. package/dist/skills/defaults/mobile/mobile-ios-design.md +266 -0
  131. package/dist/skills/defaults/monitoring/distributed-tracing.md +436 -0
  132. package/dist/skills/defaults/monitoring/grafana-dashboards.md +370 -0
  133. package/dist/skills/defaults/monitoring/prometheus-configuration.md +379 -0
  134. package/dist/skills/defaults/monitoring/slo-implementation.md +323 -0
  135. package/dist/skills/defaults/refactoring/code-refactoring.md +349 -0
  136. package/dist/skills/defaults/security/anti-reversing-techniques/SKILL.md +559 -0
  137. package/dist/skills/defaults/security/auditor.md +168 -0
  138. package/dist/skills/defaults/security/binary-analysis-patterns/SKILL.md +438 -0
  139. package/dist/skills/defaults/security/memory-forensics/SKILL.md +483 -0
  140. package/dist/skills/defaults/security/mtls-configuration.md +349 -0
  141. package/dist/skills/defaults/security/protocol-reverse-engineering/SKILL.md +520 -0
  142. package/dist/skills/defaults/security/sast-configuration.md +182 -0
  143. package/dist/skills/defaults/security/security.md +313 -0
  144. package/dist/skills/defaults/security/stride-analysis.md +273 -0
  145. package/dist/skills/defaults/security/threat-mitigation-mapping.md +290 -0
  146. package/dist/skills/defaults/systems/bash-defensive-patterns/SKILL.md +539 -0
  147. package/dist/skills/defaults/systems/bats-testing-patterns/SKILL.md +631 -0
  148. package/dist/skills/defaults/systems/go-concurrency-patterns.md +657 -0
  149. package/dist/skills/defaults/systems/memory-safety-patterns.md +605 -0
  150. package/dist/skills/defaults/systems/rust-async-patterns.md +519 -0
  151. package/dist/skills/defaults/systems/shellcheck-configuration/SKILL.md +456 -0
  152. package/dist/skills/defaults/team-collaboration/multi-reviewer-patterns.md +126 -0
  153. package/dist/skills/defaults/team-collaboration/parallel-feature-development.md +151 -0
  154. package/dist/skills/defaults/testing/javascript-testing-patterns.md +1021 -0
  155. package/dist/skills/defaults/testing/python-testing-patterns.md +351 -0
  156. package/dist/skills/defaults/testing/testing.md +332 -0
  157. package/dist/skills/defaults/workflows/context-driven-development.md +384 -0
  158. package/dist/skills/defaults/workflows/track-management.md +592 -0
  159. package/dist/skills/defaults/workflows/workflow-patterns.md +622 -0
  160. package/dist/skills/index.d.ts +11 -0
  161. package/dist/skills/index.d.ts.map +1 -0
  162. package/dist/skills/index.js +129 -0
  163. package/dist/skills/index.js.map +1 -0
  164. package/dist/utils/character.js +4 -4
  165. package/dist/utils/character.js.map +1 -1
  166. package/dist/utils/inputbar.d.ts.map +1 -1
  167. package/dist/utils/inputbar.js +7 -0
  168. package/dist/utils/inputbar.js.map +1 -1
  169. package/package.json +1 -1
@@ -0,0 +1,438 @@
1
+ ---
2
+ name: binary-analysis-patterns
3
+ description: Master binary analysis patterns including disassembly, decompilation, control flow analysis, and code pattern recognition. Use when analyzing executables, understanding compiled code, or performing static analysis on binaries.
4
+ ---
5
+
6
+ # Binary Analysis Patterns
7
+
8
+ Comprehensive patterns and techniques for analyzing compiled binaries, understanding assembly code, and reconstructing program logic.
9
+
10
+ ## Disassembly Fundamentals
11
+
12
+ ### x86-64 Instruction Patterns
13
+
14
+ #### Function Prologue/Epilogue
15
+
16
+ ```asm
17
+ ; Standard prologue
18
+ push rbp ; Save base pointer
19
+ mov rbp, rsp ; Set up stack frame
20
+ sub rsp, 0x20 ; Allocate local variables
21
+
22
+ ; Leaf function (no calls)
23
+ ; May skip frame pointer setup
24
+ sub rsp, 0x18 ; Just allocate locals
25
+
26
+ ; Standard epilogue
27
+ mov rsp, rbp ; Restore stack pointer
28
+ pop rbp ; Restore base pointer
29
+ ret
30
+
31
+ ; Leave instruction (equivalent)
32
+ leave ; mov rsp, rbp; pop rbp
33
+ ret
34
+ ```
35
+
36
+ #### Calling Conventions
37
+
38
+ **System V AMD64 (Linux, macOS)**
39
+
40
+ ```asm
41
+ ; Arguments: RDI, RSI, RDX, RCX, R8, R9, then stack
42
+ ; Return: RAX (and RDX for 128-bit)
43
+ ; Caller-saved: RAX, RCX, RDX, RSI, RDI, R8-R11
44
+ ; Callee-saved: RBX, RBP, R12-R15
45
+
46
+ ; Example: func(a, b, c, d, e, f, g)
47
+ mov rdi, [a] ; 1st arg
48
+ mov rsi, [b] ; 2nd arg
49
+ mov rdx, [c] ; 3rd arg
50
+ mov rcx, [d] ; 4th arg
51
+ mov r8, [e] ; 5th arg
52
+ mov r9, [f] ; 6th arg
53
+ push [g] ; 7th arg on stack
54
+ call func
55
+ ```
56
+
57
+ **Microsoft x64 (Windows)**
58
+
59
+ ```asm
60
+ ; Arguments: RCX, RDX, R8, R9, then stack
61
+ ; Shadow space: 32 bytes reserved on stack
62
+ ; Return: RAX
63
+
64
+ ; Example: func(a, b, c, d, e)
65
+ sub rsp, 0x28 ; Shadow space + alignment
66
+ mov rcx, [a] ; 1st arg
67
+ mov rdx, [b] ; 2nd arg
68
+ mov r8, [c] ; 3rd arg
69
+ mov r9, [d] ; 4th arg
70
+ mov [rsp+0x20], [e] ; 5th arg on stack
71
+ call func
72
+ add rsp, 0x28
73
+ ```
74
+
75
+ ### ARM Assembly Patterns
76
+
77
+ #### ARM64 (AArch64) Calling Convention
78
+
79
+ ```asm
80
+ ; Arguments: X0-X7
81
+ ; Return: X0 (and X1 for 128-bit)
82
+ ; Frame pointer: X29
83
+ ; Link register: X30
84
+
85
+ ; Function prologue
86
+ stp x29, x30, [sp, #-16]! ; Save FP and LR
87
+ mov x29, sp ; Set frame pointer
88
+
89
+ ; Function epilogue
90
+ ldp x29, x30, [sp], #16 ; Restore FP and LR
91
+ ret
92
+ ```
93
+
94
+ #### ARM32 Calling Convention
95
+
96
+ ```asm
97
+ ; Arguments: R0-R3, then stack
98
+ ; Return: R0 (and R1 for 64-bit)
99
+ ; Link register: LR (R14)
100
+
101
+ ; Function prologue
102
+ push {fp, lr}
103
+ add fp, sp, #4
104
+
105
+ ; Function epilogue
106
+ pop {fp, pc} ; Return by popping PC
107
+ ```
108
+
109
+ ## Control Flow Patterns
110
+
111
+ ### Conditional Branches
112
+
113
+ ```asm
114
+ ; if (a == b)
115
+ cmp eax, ebx
116
+ jne skip_block
117
+ ; ... if body ...
118
+ skip_block:
119
+
120
+ ; if (a < b) - signed
121
+ cmp eax, ebx
122
+ jge skip_block ; Jump if greater or equal
123
+ ; ... if body ...
124
+ skip_block:
125
+
126
+ ; if (a < b) - unsigned
127
+ cmp eax, ebx
128
+ jae skip_block ; Jump if above or equal
129
+ ; ... if body ...
130
+ skip_block:
131
+ ```
132
+
133
+ ### Loop Patterns
134
+
135
+ ```asm
136
+ ; for (int i = 0; i < n; i++)
137
+ xor ecx, ecx ; i = 0
138
+ loop_start:
139
+ cmp ecx, [n] ; i < n
140
+ jge loop_end
141
+ ; ... loop body ...
142
+ inc ecx ; i++
143
+ jmp loop_start
144
+ loop_end:
145
+
146
+ ; while (condition)
147
+ jmp loop_check
148
+ loop_body:
149
+ ; ... body ...
150
+ loop_check:
151
+ cmp eax, ebx
152
+ jl loop_body
153
+
154
+ ; do-while
155
+ loop_body:
156
+ ; ... body ...
157
+ cmp eax, ebx
158
+ jl loop_body
159
+ ```
160
+
161
+ ### Switch Statement Patterns
162
+
163
+ ```asm
164
+ ; Jump table pattern
165
+ mov eax, [switch_var]
166
+ cmp eax, max_case
167
+ ja default_case
168
+ jmp [jump_table + eax*8]
169
+
170
+ ; Sequential comparison (small switch)
171
+ cmp eax, 1
172
+ je case_1
173
+ cmp eax, 2
174
+ je case_2
175
+ cmp eax, 3
176
+ je case_3
177
+ jmp default_case
178
+ ```
179
+
180
+ ## Data Structure Patterns
181
+
182
+ ### Array Access
183
+
184
+ ```asm
185
+ ; array[i] - 4-byte elements
186
+ mov eax, [rbx + rcx*4] ; rbx=base, rcx=index
187
+
188
+ ; array[i] - 8-byte elements
189
+ mov rax, [rbx + rcx*8]
190
+
191
+ ; Multi-dimensional array[i][j]
192
+ ; arr[i][j] = base + (i * cols + j) * element_size
193
+ imul eax, [cols]
194
+ add eax, [j]
195
+ mov edx, [rbx + rax*4]
196
+ ```
197
+
198
+ ### Structure Access
199
+
200
+ ```c
201
+ struct Example {
202
+ int a; // offset 0
203
+ char b; // offset 4
204
+ // padding // offset 5-7
205
+ long c; // offset 8
206
+ short d; // offset 16
207
+ };
208
+ ```
209
+
210
+ ```asm
211
+ ; Accessing struct fields
212
+ mov rdi, [struct_ptr]
213
+ mov eax, [rdi] ; s->a (offset 0)
214
+ movzx eax, byte [rdi+4] ; s->b (offset 4)
215
+ mov rax, [rdi+8] ; s->c (offset 8)
216
+ movzx eax, word [rdi+16] ; s->d (offset 16)
217
+ ```
218
+
219
+ ### Linked List Traversal
220
+
221
+ ```asm
222
+ ; while (node != NULL)
223
+ list_loop:
224
+ test rdi, rdi ; node == NULL?
225
+ jz list_done
226
+ ; ... process node ...
227
+ mov rdi, [rdi+8] ; node = node->next (assuming next at offset 8)
228
+ jmp list_loop
229
+ list_done:
230
+ ```
231
+
232
+ ## Common Code Patterns
233
+
234
+ ### String Operations
235
+
236
+ ```asm
237
+ ; strlen pattern
238
+ xor ecx, ecx
239
+ strlen_loop:
240
+ cmp byte [rdi + rcx], 0
241
+ je strlen_done
242
+ inc ecx
243
+ jmp strlen_loop
244
+ strlen_done:
245
+ ; ecx contains length
246
+
247
+ ; strcpy pattern
248
+ strcpy_loop:
249
+ mov al, [rsi]
250
+ mov [rdi], al
251
+ test al, al
252
+ jz strcpy_done
253
+ inc rsi
254
+ inc rdi
255
+ jmp strcpy_loop
256
+ strcpy_done:
257
+
258
+ ; memcpy using rep movsb
259
+ mov rdi, dest
260
+ mov rsi, src
261
+ mov rcx, count
262
+ rep movsb
263
+ ```
264
+
265
+ ### Arithmetic Patterns
266
+
267
+ ```asm
268
+ ; Multiplication by constant
269
+ ; x * 3
270
+ lea eax, [rax + rax*2]
271
+
272
+ ; x * 5
273
+ lea eax, [rax + rax*4]
274
+
275
+ ; x * 10
276
+ lea eax, [rax + rax*4] ; x * 5
277
+ add eax, eax ; * 2
278
+
279
+ ; Division by power of 2 (signed)
280
+ mov eax, [x]
281
+ cdq ; Sign extend to EDX:EAX
282
+ and edx, 7 ; For divide by 8
283
+ add eax, edx ; Adjust for negative
284
+ sar eax, 3 ; Arithmetic shift right
285
+
286
+ ; Modulo power of 2
287
+ and eax, 7 ; x % 8
288
+ ```
289
+
290
+ ### Bit Manipulation
291
+
292
+ ```asm
293
+ ; Test specific bit
294
+ test eax, 0x80 ; Test bit 7
295
+ jnz bit_set
296
+
297
+ ; Set bit
298
+ or eax, 0x10 ; Set bit 4
299
+
300
+ ; Clear bit
301
+ and eax, ~0x10 ; Clear bit 4
302
+
303
+ ; Toggle bit
304
+ xor eax, 0x10 ; Toggle bit 4
305
+
306
+ ; Count leading zeros
307
+ bsr eax, ecx ; Bit scan reverse
308
+ xor eax, 31 ; Convert to leading zeros
309
+
310
+ ; Population count (popcnt)
311
+ popcnt eax, ecx ; Count set bits
312
+ ```
313
+
314
+ ## Decompilation Patterns
315
+
316
+ ### Variable Recovery
317
+
318
+ ```asm
319
+ ; Local variable at rbp-8
320
+ mov qword [rbp-8], rax ; Store to local
321
+ mov rax, [rbp-8] ; Load from local
322
+
323
+ ; Stack-allocated array
324
+ lea rax, [rbp-0x40] ; Array starts at rbp-0x40
325
+ mov [rax], edx ; array[0] = value
326
+ mov [rax+4], ecx ; array[1] = value
327
+ ```
328
+
329
+ ### Function Signature Recovery
330
+
331
+ ```asm
332
+ ; Identify parameters by register usage
333
+ func:
334
+ ; rdi used as first param (System V)
335
+ mov [rbp-8], rdi ; Save param to local
336
+ ; rsi used as second param
337
+ mov [rbp-16], rsi
338
+ ; Identify return by RAX at end
339
+ mov rax, [result]
340
+ ret
341
+ ```
342
+
343
+ ### Type Recovery
344
+
345
+ ```asm
346
+ ; 1-byte operations suggest char/bool
347
+ movzx eax, byte [rdi] ; Zero-extend byte
348
+ movsx eax, byte [rdi] ; Sign-extend byte
349
+
350
+ ; 2-byte operations suggest short
351
+ movzx eax, word [rdi]
352
+ movsx eax, word [rdi]
353
+
354
+ ; 4-byte operations suggest int/float
355
+ mov eax, [rdi]
356
+ movss xmm0, [rdi] ; Float
357
+
358
+ ; 8-byte operations suggest long/double/pointer
359
+ mov rax, [rdi]
360
+ movsd xmm0, [rdi] ; Double
361
+ ```
362
+
363
+ ## Ghidra Analysis Tips
364
+
365
+ ### Improving Decompilation
366
+
367
+ ```java
368
+ // In Ghidra scripting
369
+ // Fix function signature
370
+ Function func = getFunctionAt(toAddr(0x401000));
371
+ func.setReturnType(IntegerDataType.dataType, SourceType.USER_DEFINED);
372
+
373
+ // Create structure type
374
+ StructureDataType struct = new StructureDataType("MyStruct", 0);
375
+ struct.add(IntegerDataType.dataType, "field_a", null);
376
+ struct.add(PointerDataType.dataType, "next", null);
377
+
378
+ // Apply to memory
379
+ createData(toAddr(0x601000), struct);
380
+ ```
381
+
382
+ ### Pattern Matching Scripts
383
+
384
+ ```python
385
+ # Find all calls to dangerous functions
386
+ for func in currentProgram.getFunctionManager().getFunctions(True):
387
+ for ref in getReferencesTo(func.getEntryPoint()):
388
+ if func.getName() in ["strcpy", "sprintf", "gets"]:
389
+ print(f"Dangerous call at {ref.getFromAddress()}")
390
+ ```
391
+
392
+ ## IDA Pro Patterns
393
+
394
+ ### IDAPython Analysis
395
+
396
+ ```python
397
+ import idaapi
398
+ import idautils
399
+ import idc
400
+
401
+ # Find all function calls
402
+ def find_calls(func_name):
403
+ for func_ea in idautils.Functions():
404
+ for head in idautils.Heads(func_ea, idc.find_func_end(func_ea)):
405
+ if idc.print_insn_mnem(head) == "call":
406
+ target = idc.get_operand_value(head, 0)
407
+ if idc.get_func_name(target) == func_name:
408
+ print(f"Call to {func_name} at {hex(head)}")
409
+
410
+ # Rename functions based on strings
411
+ def auto_rename():
412
+ for s in idautils.Strings():
413
+ for xref in idautils.XrefsTo(s.ea):
414
+ func = idaapi.get_func(xref.frm)
415
+ if func and "sub_" in idc.get_func_name(func.start_ea):
416
+ # Use string as hint for naming
417
+ pass
418
+ ```
419
+
420
+ ## Best Practices
421
+
422
+ ### Analysis Workflow
423
+
424
+ 1. **Initial triage**: File type, architecture, imports/exports
425
+ 2. **String analysis**: Identify interesting strings, error messages
426
+ 3. **Function identification**: Entry points, exports, cross-references
427
+ 4. **Control flow mapping**: Understand program structure
428
+ 5. **Data structure recovery**: Identify structs, arrays, globals
429
+ 6. **Algorithm identification**: Crypto, hashing, compression
430
+ 7. **Documentation**: Comments, renamed symbols, type definitions
431
+
432
+ ### Common Pitfalls
433
+
434
+ - **Optimizer artifacts**: Code may not match source structure
435
+ - **Inline functions**: Functions may be expanded inline
436
+ - **Tail call optimization**: `jmp` instead of `call` + `ret`
437
+ - **Dead code**: Unreachable code from optimization
438
+ - **Position-independent code**: RIP-relative addressing