看《关于邹建书中的一个用户函数》一帖的问题?

jwt1982 2006-03-02 04:27:04
原帖:http://community.csdn.net/Expert/topic/4564/4564564.xml

看完后,完全复制该代码到我机器运行,结果出现错误
原贴循环体
while charindex(@s,@split)>0
begin
insert @re values(left(@s,charindex(@s,@split)-1))
set @s=stuff(@s,1,charindex(@s,@split)+@splitlen,'')
end

后改正循环体,如下,方正常

while charindex(@split,@s)>0
begin
insert @re values(left(@s,charindex(@split,@s)-1))
set @s=stuff(@s,1,charindex(@split,@s)+@splitlen-1,'')
end
insert @re values(@s)

1、charindex用法和该贴正好相反
2、在set @s=stuff(@s,1,charindex(@split,@s)+@splitlen-1,'')中少写一个1

百思不得其解,请问是否是版本不同的原因呢?
是不是原帖的作者漏写了呢?谢谢邹老大或其他大大近来解释一下
...全文
151 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jwt1982 2006-03-03
  • 打赏
  • 举报
回复
呵呵,这样知道了
Yang_ 2006-03-03
  • 打赏
  • 举报
回复
能得出正确数据就可以了

结束了吧
Yang_ 2006-03-03
  • 打赏
  • 举报
回复
你改了原来 贴的一个代码

原贴
set @splitlen=len(@split+'a')-2


set @splitlen=len(@ss)

所以你需要-1,原贴不需要
Yang_ 2006-03-03
  • 打赏
  • 举报
回复
是的,关于charindex那个贴的代码是错误的
jwt1982 2006-03-03
  • 打赏
  • 举报
回复
TO:Yang_(扬帆破浪)
declare @s nvarchar(3000)
declare @ss nvarchar(10)
declare @re table(col nvarchar(100))
declare @splitlen int



set @s='132,199,999,993,21000,00032188,888'
set @ss=','
set @splitlen=len(@ss)

while charindex(@ss,@s)>0
begin
insert @re values(left(@s,charindex(@ss,@s)-1))
set @s=stuff(@s,1,charindex(@ss,@s)+@splitlen-1,'')
--insert @re values(@s)
end
insert @re values(@s)


select * from @re

这样返回的是
132
199
999
993
21000
00032188
888

如果改成

set @s='132,199,999,993,21000,00032188,888'
set @ss=','
set @splitlen=len(@ss)

while charindex(@ss,@s)>0
begin
insert @re values(left(@s,charindex(@ss,@s)-1))
set @s=stuff(@s,1,charindex(@ss,@s)+@splitlen,'')
--insert @re values(@s)
end
insert @re values(@s)


select * from @re

结果是这样的

132
99
99
93
1000
0032188
88

所以我添加了一个1
jwt1982 2006-03-03
  • 打赏
  • 举报
回复
那么,是不是我看的帖子,那个楼主的写法有错误呢?
Yang_ 2006-03-03
  • 打赏
  • 举报
回复
2、在set @s=stuff(@s,1,charindex(@split,@s)+@splitlen-1,'')中少写一个1

这个应该不用改
set @s=stuff(@s,1,charindex(@split,@s)+@splitlen,'')
Yang_ 2006-03-03
  • 打赏
  • 举报
回复
楼主正确
jwt1982 2006-03-03
  • 打赏
  • 举报
回复
呵呵,我机器上的连机帮助怎么和你们的不一样,而且运行起来还不一样????

CHARINDEX
返回字符串中指定表达式的起始位置。

语法
CHARINDEX ( expression1 , expression2 [ , start_location ] )

参数
expression1

一个表达式,其中包含要寻找的字符的次序。expression1 是一个短字符数据类型分类的表达式。

expression2

一个表达式,通常是一个用于搜索指定序列的列。expression2 属于字符串数据类型分类。

start_location

在 expression2 中搜索 expression1 时的起始字符位置。如果没有给定 start_location,而是一个负数或零,则将从 expression2 的起始位置开始搜索。

返回类型
int
-------------------------------------------------------------
也就是说,在我这里,第一个参数是子串,第二个参数才是母串
正好和你们提供的是相反的?为什么?
msjqd 2006-03-03
  • 打赏
  • 举报
回复
chaindex(@key,@spilt_string)
位置查找函数

@key:表示在字符串中查找的表示符
@spilt_string:表示查找的字符串

stuff(@str,@start_pos,@end_pos,@stuff_str)
根据位置把原字符串中的 @start_pos 到@end_pos之间的字符串改成 @stuff_str 字符串

@str :要替换的总字符串
@start_pos:替换的起始位置
@end_pos :替换的结束位置
@strff_str:替换成字符串

stuff('123456',2,3,'888')
188856
把 234 替换成 888
内容概要:本文详细记录了对一个Android ARM64静态ELF文件字符串加密机制的逆向分析过程。该ELF文件的所有字符串均被加密,无法通过常规strings命令或IDA直接识别。作者通过分析发现,加密字符串存储在.rodata段,其解密所需信息(包括密文地址、长度和16位密钥)保存在.data.rel.ro段的40字节描述符。核心解密函数sub_10F408采用自反的双pass流密码算法,结合固定密钥KEY_TERM(由.data段24字节数据计算得出),实现字节级非线性、位置与长度相关的加密。文章还复现了完整的Python解密脚本,并揭示了该保护机制的本质为代码混淆而非强加密,最终成功批量解密全部956条字符串,暴露程序真实行为,如shell命令模板、设备标识篡改、网络重置等操作。此外,文还提及未启用的自定义壳框架及其反dump设计。; 适合人群:具备逆向工程基础的安全研究人员、二进制分析人员及对ELF保护技术感兴趣的开发者。; 使用场景及目标:①学习ELF二进制字符串加密的典型实现方式与逆向突破口;②掌握从结构识别、函数追踪到算法还原的完整逆向流程;③理解“绑定二进制”的完整性校验设计及其局限性;④实践编写IDAPython脚本自动化提取与解密敏感数据。; 阅读建议:此资源以实战案例驱动,不仅展示技术细节,更强调逆向思维与验证方法,建议读者结合IDA调试环境,逐步跟随文步骤进行动态分析与算法验证,深入理解每一步的推理依据。

34,876

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧