intel汇编几种跳转的区别

几种跳转指令和对应的机器码

0xE8    CALL    后面的四个字节是地址

0xE9    JMP    后面的四个字节是偏移

0xEB    JMP    后面的二个字节是偏移

0xFF15    CALL    后面的四个字节是存放地址的地址

0xFF25    JMP    后面的四个字节是存放地址的地址
比如想实现循环跳转当前指令,就可以是eb fe,或者e8 fb ff ff ff

0x68    PUSH    后面的四个字节入栈

0x6A    PUSH    后面的一个字节入栈

shellcode跳转回原始OEP方法一

大部分人比较喜欢直接jmp跳转到原始oep,这时候一般都用e9跳转,e9后面的四个字节是一个偏移地址。
计算公式: 偏移地址 = 目的地址 - 跳转基地址(jmp的下一条指令的地址)
也就是 原始OEP - jmp的下一条指令的地址

db    0e9h        ;这是jmp
OEPOffs:
dd    ?        ;这里是4个字节 未初始化


偏移地址 = 原始OEP - (offset OEPOffs + 4)  为什么+4 因为OEPOffs标号向后偏移4个字节 才是jmp的下一条指令地址  也就是跳转基地址

shellcode跳转回原始OEP方法二

有些人用 push oep然后jmp dword ptr [esp]的方法跳回原始oep,这时候shellcode要这样写:

db    68h
OEP:
dd    ?
jmp dword ptr [esp]


68h是 push后面四个字节的意思  dd ? 声明了四个字节,然后通过OEP标号,定位到这个位置,然后把原始OEP写进去就可以了

参考资料https://blog.csdn.net/wzsy/article/details/17163589 

### 使用 LoRA 对 MedSAM 进行微调的方法 #### 背景介绍 MedSAM 是一种基于 SAM(Segment Anything Model)的医学图像分割模型,适用于多种医学图像任务。然而,在实际应用中,直接将预训练好的 SAM 应用于医学领域可能无法达到理想效果[^4]。为了提升性能并减少计算开销,可以采用参数高效微调技术(Parameter-Efficient Fine-Tuning, PEFT)。其中,低秩适应(Low-Rank Adaptation, LoRA)是一种有效的策略。 LoRA 的核心思想是在原有模型的基础上引入一组可学习的小矩阵 \( \Delta W_A \) 和 \( \Delta W_B \),使得最终更新后的权重为: \[ W_{new} = W_{old} + (\Delta W_A)(\Delta W_B)^T \] 这种方式仅需优化少量新增参数即可实现高效的迁移学习[^1]。 --- #### 实现步骤概述 以下是使用 LoRA 对 MedSAM 模型进行微调的具体方法: 1. **加载预训练模型** 首先需要加载已有的 MedSAM 或 SAM 模型作为基础架构。 ```python from segment_anything import sam_model_registry model_type = "vit_b" # 可选:vit_b/vit_l/vit_h checkpoint_path = "path/to/sam_vit_b.pth" device = "cuda" if torch.cuda.is_available() else "cpu" sam = sam_model_registry[model_type](checkpoint=checkpoint_path).to(device) ``` 2. **集成 LoRA 层** 将 LoRA 替代原有的全连接层或卷积层部分。这可以通过修改 PyTorch 模型结构完成。 ```python import loralib as lora rank = 8 # 设置 LoRA 秩大小 for name, module in sam.named_modules(): if isinstance(module, torch.nn.Linear): # 替换线性层 new_module = lora.LoRALinear( in_features=module.in_features, out_features=module.out_features, r=rank ) setattr(sam, name.split('.')[-1], new_module) elif isinstance(module, torch.nn.Conv2d): # 替换卷积层 new_conv_layer = lora.LoRAConv2d( in_channels=module.in_channels, out_channels=module.out_channels, kernel_size=module.kernel_size, stride=module.stride, padding=module.padding, r=rank ) setattr(sam, name.split('.')[-1], new_conv_layer) ``` 3. **准备数据集** 构建适合的任务数据集,例如医学图像分割所需的标注文件和图片路径列表。如果涉及多模态输入,则应确保数据格式统一。 ```python from torchvision import transforms from torch.utils.data import DataLoader, Dataset class MedicalImageDataset(Dataset): def __init__(self, image_paths, mask_paths, transform=None): self.image_paths = image_paths self.mask_paths = mask_paths self.transform = transform def __len__(self): return len(self.image_paths) def __getitem__(self, idx): image = Image.open(self.image_paths[idx]).convert('RGB') mask = Image.open(self.mask_paths[idx]) if self.transform is not None: image = self.transform(image) mask = self.transform(mask) return image, mask dataset = MedicalImageDataset(..., ...) dataloader = DataLoader(dataset, batch_size=8, shuffle=True) ``` 4. **定义损失函数与优化器** 结合具体任务需求选择合适的损失函数,并配置 AdamW 等常用优化算法。 ```python criterion = torch.nn.CrossEntropyLoss() optimizer = torch.optim.AdamW(filter(lambda p: p.requires_grad, sam.parameters()), lr=1e-4) ``` 5. **执行训练过程** 利用标准监督学习框架迭代更新网络权值直至收敛为止。 ```python num_epochs = 10 for epoch in range(num_epochs): running_loss = 0.0 for images, masks in dataloader: images, masks = images.to(device), masks.to(device) outputs = sam(images) loss = criterion(outputs['masks'], masks.long()) optimizer.zero_grad() loss.backward() optimizer.step() running_loss += loss.item() print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {running_loss/len(dataloader)}') ``` 6. **保存与测试模型** 训练完成后存储最佳版本以便后续部署验证。 ```python torch.save(sam.state_dict(), 'medsam_finetuned_with_lora.pth') ``` --- ### 关键注意事项 - 在设计实验时应当合理选取超参如 `r` 值以及冻结哪些原始模块不动; - 若发现过拟合现象则可通过正则化手段缓解或者增加更多样本来改善情况; - 泛化能力可能会因过度简化而有所下降因此建议综合考量各方面因素后再做决定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值